Tôi muốn tạo động một mã băm %detail
mà không sử dụng câu lệnh eval
. Mã này hoạt động tốt với tuyên bố eval
, nhưng có cách nào tốt hơn để thực hiện việc này mà không sử dụng eval
không?
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$'
};
Tôi không nghĩ câu lệnh eval của bạn sẽ hoạt động nếu bạn 'sử dụng nghiêm ngặt' (tôi phải xóa nó khỏi thử nghiệm của mình để có được kết quả mong muốn). –