アプリ版:「スタンプのみでお礼する」機能のリリースについて

Perl初心者です。
指定したファイルの中から指定した文字列の入っている行を取得したいのですが、
open(FL, $ARGV[0]);
while (<FL>) {
if ($_ =~ /$ARGV[1]/) { print $_; }
} close(FL);
としたとき、
$ARGV[1]に aaa/bbb/ccc と入れてaaaかつbbbかつcccを含む行としたいのですが、うまく動作しません。
このような場合がGREPとかのコマンドを使ったほうがよいのでしょうか?
別の処理も組み込みたいので、できればperlで書きたいのですが、正規表現の文字列を引数で与えるようなことはできるのでしょうか?
よろしく御願いします。

A 回答 (1件)

正規表現を文字列で与えることはもちろん可能ですが, 「aaa, bbb, ccc を全て含む」というのは (書けないことはないけど面倒なので) やめた方がいいと思います. 素直に && でつなぐ (あるいはもっとひねる) 方が安全です.



ひねった方向でいくと, 例えば $ARGV[1] が "aaa/bbb/ccc" だとして
my @patterns = map { qr/$_/ } split(/\//, $ARGV[1]);
open(FL, $ARGV[0]);
while (my $line = <FL>) {
print $line unless grep { $line !~ $_ } @patterns;
}
close(FL);
でいける... はずです. 試してないけど.
    • good
    • 0
この回答へのお礼

早々のアドバイス有難うございました。

一発で動作しました。
Perlはなかなか正規表現とか特殊な文字の扱いが覚えられずに手こずっています。

大変助かりました。
感謝いたします。

お礼日時:2008/02/29 18:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!