Perl: glob 関数の戻り値について
glob 関数は、OSのシェルを起動しワイルドカードを含む文字列に対してパス展開を行うときに使う。
しかし、ワイルドカードを使用しない場合はパス展開処理が行われず、そのまま文字列がリストに格納される。
空文字列も同様、そのままリストに格納されることとなる。
glob 関数の戻り値に含まれているからといって、決してそのファイルの存在が保証されている訳ではない。
空文字列が含まれている可能性さえある。
従って、glob の結果に対して stat する場合などは常にその結果を検査するべきである。
・xで始まる名前のファイルが無い前提
#!/usr/bin/env perl
use strict;
use warnings;
sub p {
print '(', @_ ? "'" . join("', '" , @_) . "'" : q(), ")\n";
}
p(glob '');
p(glob ' ');
p(glob 'x');
p(glob 'x?');
p(glob 'x*');
p(glob '[x]');
p(glob '{x}');
p(glob 'x x? x* [x] {x} ""');
・出力結果
('')
('')
('x')
()
()
()
('x')
('x', 'x', '')
・stat の例
use Carp;
use English qw( -no match vars );
my $path = 'x';
for my $file (glob $path) {
my $result = stat $file
or croak "Couldn't stat '$file': $OS_ERROR";
}
0 件のコメント:
コメントを投稿