![]() |
| カレッヂ |
質問者 rescue
投稿日 5/30(金) 23:28:38
いつもお世話になってます。
私が何か勘違いしているのかわかりませんが、ちょっと変な現象が起きているので、
分かる方ご指摘いただければ幸いです。
opendir(DIR,$base);
@list = readdir(DIR);
close(DIR);
@test1 = @list;
foreach $file (@list) {
push(@test2,$file);
}
あるフォルダ一覧を取得し、ループの前 @test1 と、ループ中 @test2 は同一の
値が入ると思うのですが、何故か @test2 には、@test1 の値をちょうど2回
繰り返しの値が表示されてしまうのです。
例
@test1
--------------
.
..
123
456
789
--------------
@test2
--------------
.
..
123
456
789
.
..
123
456
789
---------------
何か検討違いな思いをしているのか、解決しないので、
よろしくおねがいします。
プロバイダ参照: |
回答者 やまだ
[削除]
投稿日 5/31(土) 00:07:48
別におかしいところは、ないと思うのですが、表示(確認)の部分はどうなかんじでしょうか? |
回答者 domo
[削除]
投稿日 5/31(土) 00:55:16
#!/usr/bin/perl -w
$base = './';
my (@test1,@test2,@list);# ----- 初期化
opendir(DIR,$base);
@list = readdir(DIR);
close(DIR);
@test1 = @list;
foreach $file (@list) {
push(@test2,$file);
}
print "Content-type: text/html\n\n";
print "<pre>";
print join("\n",(@list,"-------",@test1,"-------",@test2));
print "</pre>";
--
以上のコードをCGIとして実行しましたが、すべて配列が同じ値で表示されました。
私も特に問題ないと思います。
FreeBSD + Apache 1.3.27 + Perl5.00503
|
質問者 rescue
[削除]
投稿日 5/31(土) 11:03:02
アドバイスありがとうございます。
質問に書いたのは要旨を書いたので、
もちろんすべての変数や配列は念の為直前に初期化していますし、
局所変数にしたりしていますが、それでも何故か @test1 ≠ @test2 で
同じ値にならないので「おかしい」と思ったのです。
さらに変なのは、なる時とならない時があるということです。
プログラム上での理論としては同じ値のはずだと思うので、
どうしてこんなことが起きるのか、
Perlのバグなのか、何か知っている情報があったらと思ったものでした。
いまは現実対策として、だぶった値を避けるように
無理やりこうすることにして結果オーライ的な処理にしてみました。
opendir(DIR,$base);
@list = readdir(DIR);
close(DIR);
@test1 = @list;
foreach $file (@list) {
if ($CHECK{$file}) { next; } # <対策
$CHECK{$file} = 1; # <対策
push(@test2,$file);
}
とりあえず、私の勘違いではなかったことが分かっただけでも
先にすすめそうです。ありがとうございました。 |
返信(回答)する
| Web裏技 |