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 件のコメント:
コメントを投稿