DBIを使用してSybaseに接続し、hash_ref要素のレコードを取得しています。私の場合、DBI :: Sybaseドライバは、末尾の文字、特に\ x00でレコードを返すという厄介な癖があります。私はハッシュリファレンスのすべての要素についてこれをクリーンアップする関数を作成しようとしていますが、以下のコードではトリックはしますが、それをもっと痩せる方法は見つけられません。よりよい:Perlハッシュリファレンス代入
#!/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