我使用DBI连接到Sybase以抓取hash_ref元素中的记录。 DBI :: Sybase驱动程序有一个令人讨厌的习惯,就是返回包含尾随字符的记录,在我的情况下特别是\ x00。我试图编写一个函数来清理hashref中的所有元素,我在下面的代码中做了这个窍门,但是我找不到一个方法来使它更加精简,而且我知道有这么做是为了做到这一点好:Perl Hashref替换
#!/usr/bin/perl
my $dbh = DBI->connect('dbi:Sybase:...');
my $sql = qq {SELECT * FROM table WHERE age > 18;};
my $qry = $dbh->selectall_hashref($sql, 'Name');
foreach my $val(values %$qry) {
$qry->{$val} =~ s/\x00//g;
}
foreach my $key(keys %$qry) {
$qry->{$key} =~ s/\x00//g;
foreach my $val1(keys %{$qry->{$key}}) {
$qry->{$key}->{$val1} =~ s/\x00//g;
}
foreach my $key1(keys %{$qry->{$key}}) {
$qry->{$key}->{$key1} =~ s/\x00//g;
}
你为什么试图通过它的值访问散列键? '$ qry - > {$ val}'应该给你警告'在替换中使用未初始化的值'。除非a)您没有使用警告,或者b)您碰巧拥有与所有按键相同的值。 – TLP
我不禁觉得这是不应该用正则表达式修补的东西,但正确修复。 – TLP