大きなチームが大規模なアプリケーションを開発したとします。 ここでは、誰かがデータ構造を深くチェックするときに起こりうる潜在的な災害の単純化モデルを示します。 完全自動化または有効範囲を無効にすることはできない場合は、これを回避するにはどうすればよいですか? ありがとうございました:) !!!!Perlで自動ウイルス対策を無効にするにはどうすればよいですか?
use strict; use warnings;use Data::Dumper;
my $some_ref = {akey=>{deeper=>1}};
print Dumper($some_ref);
if($some_ref->{deep}{doot} == 1){
print 'too deep '.$/;
}
if($some_ref->{deep}){
print 'Already in a deep doot'.$/;
}
print Dumper($some_ref);
これは、次のように出力します
$VAR1 = {
'akey' => {
'deeper' => 1
}
};
Use of uninitialized value in numeric eq (==) at autovivify_test.pl line 5.
Already in a deep doot
$VAR1 = {
'deep' => {},
'akey' => {
'deeper' => 1
}
};
はい、私は警告があると知っているが、...それは遅すぎるかもしれません。
お元気ですか?私のハッシュリファレンスは、結ばれたハッシュを参照していると言ってもいいでしょう。
構造の深いところでチェックをチェックする良いFETCHメソッドを実装しても問題は解決しませんか?
私はTie::StrictHash、とperltieを見ました。私の解決策の ここでは単純化されたバージョン:
#!/usr/bin/env perl;
#test_tie.pl
package StrictHash;
use strict; use warnings;
use Tie::Hash;
our @ISA = qw(Tie::StdHash);
use Carp;
sub TIEHASH {
my $class = shift;
my $hash = bless {@_}, $class;
return $hash;
}
##========================================================================
## FETCH fails if applied to a member that doesn't exist.
##========================================================================
sub FETCH {
my ($hash, $key) = @_;
Carp::confess "key '$key' does not exist" unless exists $hash->{$key};
return $hash->{$key};
}
##========================================================================
package main;
use strict;use warnings;use Data::Dumper;
#Imagine StrictHash is in ./StrictHash.pm
#use StrictHash;
my %hash;
tie %hash, 'StrictHash', akey => {deeper=>1} ;
my $some_ref =\%hash;
print Dumper($some_ref);
if($some_ref->{deep}{doot} == 1){
print 'too deep '.$/;
}
私が達成何がアプリに一つだけの場所に触れることです。 if($ some_ref - > {deep} {doot})のようなすべての場所はスタックトレースでdieを引き起こします。 だから簡単に見つけて修正します。 この種の新しい文章は不可能です。 Perlは大きなアプリにも適していますが、もっと知る必要があります;)
ありがとうございました! これは他人にも役立つことを願っています。
あなたのご質問はありますか? –
perlで自動ウイルス対策を無効にするにはどうすればよいですか? –