代码之家  ›  专栏  ›  技术社区  ›  sfgroups

带/e的perl正则表达式哈希

  •  0
  • sfgroups  · 技术社区  · 15 年前

    我希望用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;
    

    我期望这样的输出:

    name,3,cc
    

    我怎样才能做到这一点?

    1 回复  |  直到 15 年前
        1
  •  8
  •   cjm    15 年前
    s/^(name,(\d+).*)/$1,$hash{$2}/;
    

    首先,帕伦夫妇按顺序编号 左边 $1 $2

    第二,你不想使用 /e 在这里。这导致替换将作为Perl代码而不仅仅是字符串进行计算,这意味着 , comma operator 不仅仅是短信。在标量上下文中,逗号运算符对两个操作数求值并返回第二个操作数,这不是您在这里想要的。如果你说

    use warnings;
    

    use strict;
    use warnings;
    

    这两条线将有助于抓住你可能犯的许多常见错误。有时您需要在部分代码中关闭它们,但是您应该先了解规则,然后才能决定何时可以打破它们。

    如果你在这个程序中这样做,你需要添加一个 my 之前 %hash