2017-12-04 16 views
-3

私は配列@atomを持つことができます。私はその配列に3つの要素$a$b$c(pdbファイルからそれぞれの残基の名前、鎖と残基番号を取得)を押しています。例えば、$bは値AAAAAAAAABBBBBBBCCCCCCCを有しています。 $bが変更されるたびに配列を空にする方法は?配列の値が変更されたときに配列を空にする方法は?

次のように配列され、

push(@atom,"$a $b $c"); 
+6

私は質問/その問題を理解していません。 [mcve]を作成してみてください。 "$ b changes"はどういう意味ですか? – tinita

+4

'$ b'がどのように変わるのでしょうか? ///あなたの配列に3つの要素をプッシュしていません。あなたはstring_( '$ a'の定数、空白、' $ b'、空白、 '$ c')をあなたの配列にpushしています。 3つの要素をプッシュするには 'push(@atom、$ a、$ b、$ c);'(引用符なし)を使います。 – PerlDuck

+0

'@atom = qw(aa bb cc); @ atom = "" if($ atom [1]!〜m/dd/i); ' – ssr1012

答えて

3

に押され、配列内に単一の値だけを格納している場合あなたは3つの値を格納していると思いますが、それらを配列に格納する前に1つの文字列に入れています。あなたの配列内の三つの値を格納する

、あなたはこのようなコードを使用することがあります:。

my @atom = ($residue_name, $chain, $residue_number); 

(私はあなたの変数名をも変更されていることに注意してください$a$b$cは、変数のためのひどい名前であり、$aをし、 $bはPerlの特別な変数であり、ランダムコードでは使用しないでください)。

ここで何をしているのか分かりませんが、このデータをハッシュ。もちろん

my %atom = (
    residue_name => $residue_name, 
    chain   => $chain, 
    residue_number => $residue_number, 
); 

、それは私があなたのデータで何をする必要があるか分からないとしてだけで推測だ - しかし、プログラミングの重要な部分は、あなたのデータ構造が権利を取得することです。

しかし、元の配列をまだ使用していて、a)$chain変数が値を変更したかどうかを確認し、b)その時点で配列を空にします。

my @atom = ($residue_name, $chain, $residue_number); 
# Store the current value of $chain 
my $original_chain = $chain; 

はその後、後で、あなたは値が変更されたチェックして、適切な行動を取る必要があります:あなたはこのようなコードの何かを書く必要があるだろう。

if ($chain ne $original_chain) { 
    @atom =(); 
} 

もちろん、これはすべての提案のほんの一例です。私はあなたのコードがどのように構造化されているか分かりません。

1

$ $ bは$ cを想定すると、使用している理由は、私はよく分からないループで読み込み、配列

while (...) { 
    # read $a $b $c 

    if ($b ne $last_b) { 
     @atom =() # atom is affected to a new empty array 
    } 

    push @atom, ... 

    $last_b=$b 
} 
関連する問題