我期待用perl正则表达式/ e选项替换哈希值.以下代码对我不起作用.
#!/usr/bin/perl
%hash=( 1 => "aa", 2 => "bb", 3 => "cc" );
$_="name,3";
s/^(name,(\d+).*)/$2,$hash{$1}/e;
print "$_\n";
exit 0;
Run Code Online (Sandbox Code Playgroud)
我期待这样的输出:
name,3,cc
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
谢谢
s/^(name,(\d+).*)/$1,$hash{$2}/;
Run Code Online (Sandbox Code Playgroud)
首先,parens按左边的 paren 顺序编号,而不是右边的paren.$1
完整的一行$2
也是如此,而且是数字,而不是相反.
其次,你不想在/e
这里使用.这导致替换被评估为Perl代码而不仅仅是字符串,这意味着它,
被视为逗号运算符而不仅仅是文本.在标量上下文中,逗号运算符计算两个操作数并返回第二个操作数,这不是您想要的.如果你说过
use warnings;
Run Code Online (Sandbox Code Playgroud)
Perl会告诉你"在void上下文中无用的变量",因为第一个表达式被忽略了.
您应始终使用以下方式启动程序:
use strict;
use warnings;
Run Code Online (Sandbox Code Playgroud)
这两行将有助于捕捉您可能犯的许多常见错误.有时您需要为代码的一部分关闭它们,但在决定何时可以破坏它们之前,您应该先了解规则.
如果你这样做,在这个程序中,你需要添加一个我之前%hash
.
归档时间: |
|
查看次数: |
890 次 |
最近记录: |