こんにちは私は日付の書式を置き換えるために、以下のコードを使用していますが、すべての日付をグローバルに変更する方法を理解することができません。現在、スクリプトは日付を正しく見つけて置き換えますが、行内に見つかった最初の日付に対してのみ行いますが、その行の残りをスキップします。したがって、同じ行内で変更が必要な別の日付がある場合、それは無視されます。私はグローバル置換を使用しようとしましたが、無駄です。誰かが私にアイデアを与えることができれば、私は非常に感謝します。グローバル置換
use strict;
use Time::Piece();
my $file = $ARGV[0];
open FILE, $file or die;
while (my $line = <FILE>) {
chomp $line;
my ($date) = $line =~ m/([A-Z][a-z][a-z] [ \d]{2} \d{4} \d{2}:\d{2}[AP]M)/;
if ($date eq ''){
print "$line\n";
next;
}
my $new_dt = Time::Piece->strptime($date, '%b %d %Y %H:%M%p')->strftime('%Y-%m-%d %H:%M:%S');
$line =~ s/$date/$new_dt/g;
print "$line\n";
}
close FILE;
print "\n";
EDIT:例を追加しました
入力:
2007年5月15日12時00分AM、1、0、2003年2月2日12:00 PM
出力:
2007 -05-15 00:00:00、、1、2、2003年2月2日12:00 PM
サンプルの入力と出力を提供できますか? –
'm // g'で見つかったマッチに対して反復処理を行います。 – syck