regex - 如何使用 $1、$2、$3 动态分配哈希

标签 regex perl eval

我想动态创建一个 %detail散列,不使用 eval陈述。
此代码与 eval 一起工作正常语句,但有没有更好的方法来执行此操作而不使用 eval ?

my @input=('INFO: Vikram 32 2012','SAL: 12000$','ADDRESS: 54, junk, JUNK');

my %matching_hash= (
                    qr/^INFO:\s*(\S+)\s+(\S+)\s+(\S+)/ =>['name','age','joining'],
                    qr/^SAL:\s*(\S+)/ => ['salary'],
                    qr/ADDRESS:\s*(.*)/ =>['address']
                    );
my %detail;
while(my ($regex, $array) = each(%matching_hash)) {
    foreach (@input){
        if(/$regex/) {
            for(my $i=0;$i<=$#$array; $i++) {
                $j=$i+1;
                eval '$detail{$array->[$i]} = $$j';
            }
        }
    }
}
use Data::Dumper;

print Dumper(\%detail);
++++++++++++++

$VAR1 = {
          'name' => 'Vikram',
          'address' => '54, junk, JUNK',
          'age' => '32',
          'joining' => '2012',
          'salary' => '12000$'
        };

最佳答案

相关部分:

if(my @m = /$regex/) {
  for(my $i=0;$i<=$#$array; $i++) {
      $detail{$array->[$i]} = $m[$i];              
  }   
}   

关于regex - 如何使用 $1、$2、$3 动态分配哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12178692/

相关文章:

php - Windows GUI EXE 的最佳脚本语言

javascript - 无法将 eval() 与 Angular 一起使用

php - 正则表达式匹配对 Shadowbox.init() 的有效调用

perl - 如果第二个字段长于 7 个字符,则 awk 或 perl 单行打印行

arrays - 我如何制作 Perl "array of arrays of hashes"?

javascript - 如何在没有 eval() 的情况下通过 ExtJS AJAX 调用执行 Javascript,就像使用 JQuery 一样?

matlab - 计算 "sym"变量的数字部分

javascript - 正则表达式模式不允许除下划线外的特殊字符

javascript - 匹配连字符的 float

C++ 正则表达式匹配 '+' 量词