为什么我不能用if($l =~ $ARGV[0])
但是可以用if($l =~ /$ARGV[0]/g
?
$ perl script.pl '/^[\w]/g'
第二种情况
$ perl script.pl '^[\w]'
答案1
字符串和正则表达式是 Perl 中不同的原始类型,所有放在数组中的变量@ARGV
都只是内核在启动时赋予程序的字符串;$ARGV[0]
是标量字符串,而不是正则表达式。
当你这样做时if($l =~ $ARGV[0])
,$ARGV[0]
这'/^[\w]/g'
相当于if($l =~ '/^[\w]/g')
代替if($l =~ /^[\w]/g)
。在前一种情况下,斜杠只是字符串中的字符,而在后一种情况下,它们是分隔正则表达式的 Perl 语法的一部分。