我确定我错过了一些东西,需要另一双眼睛。 我已经启用警告并使用严格 我试图在变量中提取双引号 例如:
my $line = ' TITLE "Better off Faded"';
(my $title = $line) =~ s/"(.*?)"/$1/g;
print "title: [$title]\n";
print "MATCHDATA: <$`|$&|$'>\n";
print "capture1: $1\n";
这会产生输出:
title: [ TITLE Better off Faded]
MATCHDATA: < TITLE |"Better off Faded"|>
capture1: [Better off Faded]
看起来捕获工作正常,但替换命令只是从 $ title 变量中删除双引号字符,而不是使用 $ 1 捕获来填充它。
由于捕获工作正常,我已经知道我可以使用:
my $data = ($line =~ /"(.*?)"/)[0];
print "alt: [$date]\n";
从双引号中提取数据,但为什么替代品不起作用?
答案 0 :(得分:3)
您看到的结果似乎与您的代码一致。它只匹配双引号部分,并用引号的内容替换该部分,保持字符串的其余部分不变。
如果您的目标是仅将引用部分的内容放在$title
中,或许您想要这样的内容:
my($title) = $line =~ m/"(.*?)"/;