コマンドラインで@ARGVに正規表現を渡すことができないのはなぜですか?

コマンドラインで@ARGVに正規表現を渡すことができないのはなぜですか?

なぜ使用できないのにif($l =~ $ARGV[0])使用できますかif($l =~ /$ARGV[0]/g

最初のケース
$ perl script.pl '/^[\w]/g'
2番目のケース
$ perl script.pl '^[\w]'

ベストアンサー1

文字列と正規表現は、Perlでは異なる基本型です。配列に配置されたすべての変数@ARGVは、起動時にカーネルによってプログラムに割り当てられた文字列にすぎず、$ARGV[0]正規表現ではありません。

if($l =~ $ARGV[0])これは代替と同じ$ARGV[0]です。前者の場合、スラッシュは文字列の文字だけですが、後者の場合は正規表現を区切るPerl構文の一部です。'/^[\w]/g'if($l =~ '/^[\w]/g')if($l =~ /^[\w]/g)

おすすめ記事