Windows *.csv はコマンドラインから @ARGV に展開されないため、通常、次のようなことを行うことになります
map { glob } @ARGV
ファイル名を取得します。
しかし、私は異常に遭遇し、実際に何が起こっているのかを理解したいと思っていました. 「ストレンジャー・イン・ア・ストレンジ・ランド」を読み終えたばかりなので、完全に理解していないと言えます!
use Modern::Perl;
# gets the filelist but then warns
say "Test 1 ", '-' x 20;
do { func($_) for map { glob } @ARGV } or warn "at least one arg expected\n";
say '-' x 27, "\n";
# works ok
say "Test 2 ", '-' x 20;
my @x = map { glob } @ARGV or warn "at least one arg expected\n";
func($_) for @x;
say '-' x 27, "\n";
# prints 2 (there are two files)
say "Test 3 ", '-' x 20;
func($_) for (map { glob } @ARGV or warn "at least one arg expected\n");
say '-' x 27, "\n";
sub func {
say "in func = $_[0]";
}
出力:
Test 1 --------------------
in func = t.csv
in func = t2.csv
at least one arg expected
---------------------------
Test 2 --------------------
in func = t.csv
in func = t2.csv
---------------------------
Test 3 --------------------
in func = 2
---------------------------
テスト 1:なぜ が true を返さないのか理解できdo
ません。何かが出力された場合に true を返すfunc
最後のステートメントを返します。say
それともfor
への戻りとして使用されるのはdo
ですか?
テスト 3:明らかにスカラー コンテキストが暗示されていますが、どのように? マップの周りに括弧を使用しましたか?
ありがとう、リチャード。