【发布时间】:2012-01-25 16:49:34
【问题描述】:
我正在使用 DBI 连接到 Sybase 以获取 hash_ref 元素中的记录。 DBI::Sybase 驱动程序有一个讨厌的习惯,即返回带有尾随字符的记录,特别是在我的例子中是 \x00。我正在尝试编写一个函数来清理 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}应该给你警告Use of uninitialized value in substitution。除非 a) 您没有使用警告,或者 b) 您碰巧拥有与所有键相同的值。 -
我不禁觉得这是不应该用正则表达式修补的东西,但要正确修复。