为什么我无法在命令行上传递 @ARGV 中的正则表达式?

为什么我无法在命令行上传递 @ARGV 中的正则表达式?

为什么我不能用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 语法的一部分。

相关内容