2011-07-21 16 views
-2

こんにちは、みんなはモジュールに関して助けを必要とし、別のモジュールで動的に作成された配列を空にします。Perlモジュール内で動的に作成された配列を空にします。

Iこれは、これはXYZ.pmの一例であるABC.pm

//ABC.pm 
package ABC; 

our @mainArray; 

sub fetchData 
{ 
    // connect to database and fill up the @mainArray; 
    @mainArray = qw/a b c d e f/; 

} 

1; 

の一例である

//file.pl 

use ABC; 
use XYZ; 

for(qw/US UK China India France/) 
{ 
    ABC::fetchData // This will create array varialbes 
    XYZ::calculateYield 
    // This will use arrays dynamically created from fetchData 
    // At this point, when i return I want a new copy of the array used in XYZ.pm's calculateYield function 
} 

(私が作成した)1つのPerlファイルを有し、2つのPerlモジュール

//XYZ.pm 
package XYZ; 

sub calculateYield 
{ 

    foreach my $eachelement (@ABC::mainArray) 
    { 
     push @{$eachelement), "some_data_that_changes_every_time_from India, UK, US, France or China"; 
    } 

} 

さて、問題はここにあり、私は{$のeachelement} 012 @配列 "を空にしたいです(1..5)の場合、のすべてのコールの後に、「」と表示されます。$ eachelementは、すべてのカウントで同じままです。値(US、UK、China、India、France)に応じて、XYZモジュールの@($ eachelement)にプッシュされたデータの値のみが変更されます。

グループの質問は、名前が動的に作成されたモジュールの配列を空にする方法ですか?たとえば、forループが実行されるたびに、 @ {$ eachelement}をXYZ.pmでクリアします。

希望私は理解できる方法でそれを入れました。あなたがもっと良い解決策を持っているか、私が使うことができるものがあれば、それをやりたいです。質問やコードの一部が明確でない場合は、私にpingを送り返してください。

PS:小さなエラーやタイプミスを探しているわけではありません。これは単なるサンプルコードです。私は、物事をどのように行うことができるか知りたいだけです。

大変お手伝いいただきありがとうございます。

+1

"use strictures;'で少なくともコンパイルして実行するコードを提供してください。あなたが望むものすべてをやっていない場合や、間違った結果を出す場合もあります。そうすることで、質問を意味のある方法で回答する機会が大幅に増えます。 - さまざまな構文エラーを修正すると、コードは '' ARRAY ref ... 'として文字列( "a")を使用できません。 - できるだけ早く、他のモジュールのメンバーデータへのアクセスを分離する必要があります。http://stackoverflow.com/questions/3109672/how-to-make-a-hash-available-in-another-module/のコード例を参照してください。 3110097#3110097 – daxim

+2

あなたはperlのコメントインジケータが '#'ではなく '/'ですか? –

答えて

-1

私は周りを見回し、この特定の問題の解決策を見出しました。グローバル関数を定義しました

sub clear 
{ 
     for my $ref (values %MSQL::) 
    { 
     @{$ref} =(); 
    } 
} 

ありがとうございました。

@Patrick、これはTYPOエラーではありませんでした。私が言ったように、私は論理を探していました。

関連する問題