我使用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