我以这种格式(从另一个脚本)获得对脚本的输入 xyz @ abc
我的脚本中有此匹配条件
if ($test =~ /.* by (\w+)\@(\w).*/) { print $1; }
由于某种原因,该比赛没有比赛。
我尝试了以下一个命令行:
选项1:
perl -e 'my $aa = "abcd@abcd" ; if ($kk =~ /(\w+)\@(\w+)/) {print "\n $1 \n $2 \n";}
选项2:
perl -e 'my $aa = q[abcd@abcd] ; if ($kk =~ /(\w+)@(\w+)/) {print "\n $1 \n $2 \n";}
打印选项2,但不打印选项1。有人可以解释一下原因。
答案 0 :(得分:2)
命令行中存在两个问题:
您分配了变量$ aa,但对变量$ kk进行了模式匹配。
第二个原因是@abcd被解释为字符串中以“ ...”分隔的变量。变量@abcd没有定义,因此它插值到一个空字符串,实际上,您有$ aa =“ abcd”。
当您键入以下内容时,您会看到@的问题:
perl -e 'my $aa = "abcd@abcd"; print "$aa\n"'
您必须屏蔽@。因此,请尝试以下操作:
perl -e 'my $aa = "abcd\@abcd"; if ($aa =~ /(\w+)@(\w+)/ ) {print "\n $1 \n $2 \n";}'