我的班级文件中有以下类型:
has 'cardNumber' => (is => 'ro', isa => 'Int', required => 1);
我正在尝试执行以下操作:
foreach $_ (@accountsInfo) {
if ($_ =~ m/^$self->cardNumber()/) {
$self->pushing(split(/,/, $_));
$self->invokeAccount();
}
}
但是我无法正确测试它。如果我在正则表达式斜杠中手动输入我正在寻找的数字,它可以完美地工作。你能帮我使用cardNumber Type吗?
答案 0 :(得分:5)
Perl的插值规则声明数组("@foo"
)和标量("$bar"
),以及(a)查找哈希值("$baz{bar}"
)或数组({{1}中的值(b)以前案例的解引用("$foo[1]"
)被内插到双引号字符串中。
不插入函数调用和每个扩展方法调用。
您可以使用解除引用匿名引用的技巧将任意代码插入到字符串中。通常,您需要一个arrayref:
"@$foo, $$bar, $baz->{bar}, $foo->[1]"
但是标量引用也可以工作(它们长1个字符)。
"foo @{[ expressions; ]} bar"; # interpolating anon hashref
但是,您应该考虑在标量变量中缓存要插值的值:
"foo ${\( expressions; )}" # interpolating anon scalar ref
补充说明:我从该代码段中删除了必要的parens和my $cardNumber = $self->cardNumber;
for (@accountsInfo) {
if (/\A\Q$cardNumber\E/) {
$self->pushing(split /,/);
$self->invokeAccount();
}
}
提及。另外,我在$_
中转义了字符,以便它们与字面匹配,并且不会被视为正则表达式。
答案 1 :(得分:1)
打印它以查看您要匹配的内容。您将获得SOMECLASS=HASH(0x6bbb48)->foo()
之类的输出。解决方案:
/^@{[$self->cardNumber()]}/