Perl 这个代码表达式的功能是什么?

Perl 这个代码表达式的功能是什么?,perl,Perl,我对正则表达式的功能感到困惑: /\[\]$/ 我尝试了一段简短的perl代码来理解它,但我仍然感到困惑。代码输出为Else my $addr2 = {[{'firstname' => 'Nikhil', 'lastname' => 'Hegde'}, {'firstname' => 'Nikhil2', 'lastname' => 'Hegde2'}]}; if($addr2 =~ /\[\]$/) { print "If\n"; } else { p

我对正则表达式的功能感到困惑:

/\[\]$/

我尝试了一段简短的perl代码来理解它,但我仍然感到困惑。代码输出为
Else

my $addr2 = {[{'firstname' => 'Nikhil', 'lastname' => 'Hegde'}, {'firstname' => 'Nikhil2', 'lastname' => 'Hegde2'}]};
if($addr2 =~ /\[\]$/) {
    print "If\n";
} 
else {
    print "Else\n";
}
我以为
/\[\]$/
会指出该值是否为数组,但事实似乎并非如此。然后我认为,考虑到正则表达式中有一个
$
,该值可能必须以数组结尾。所以,我试着替换:

my$addr2={[{'firstname'=>'Nikhil','lastname'=>'Hegde'},{'firstname'=>'Nikhil2','lastname'=>'Hegde2'}],]}

但这也不行。代码输出保持为
Else


有谁能帮助我理解表达式
/\[\]$/
?它做什么常规匹配?谢谢

正则表达式检查字符串的匹配。在本例中,您尝试匹配哈希引用。这就是您的代码转到
else
块的原因


现在是
/\[\]$/
。它匹配任何末尾有文字
[]
的字符串。例如,字符串
my$str=“just an example[]”
将与字符串末尾的这个正则表达式匹配。

,该正则表达式匹配literal
[]
(括号对)。因此它匹配字符串
“hello[]”
,但不匹配
“hello”
。不转义的括号是字符类。此外,可能还需要一个基本事实:正则表达式在字符串上工作——可能在变量中,但您在复杂的数据结构上尝试了它。超时。。。若要继续--您的
$addr2
打印为
散列(…)
--并且该字符串的末尾没有
[]
。@zdim谢谢!这解释了lotAdd
打印($addr2\n)perl-we'$ra=[1,2];如果$ra=~/AR/',就说$ra
。只是hashref的结尾没有
[]
:)@zdim不得不说我从来没有想过这个选项!你永远不知道什么时候会有这么奇怪的事情发生在手工艺品中,
$addr2
的数据转储程序输出会澄清发生了什么事?@yon100:我无法想象这会有用。您已经可以使用
==
比较两个引用的相等性,最好的方法是
如果ref$ra eq'array'
@Sobrique,就说$ra,而不是。OP与
$addr2
的字符串化匹配,因此
打印($addr2\n”)是澄清正在发生的事情的方法。