
Perlに詳しい方教えてください。
WinXP(SP3)+ActivePerl-5.10.0.1004の環境で、重複データのチェックプログラムを
作成していますが、foreach文の挙動がよく分かりませんので教えてください。
※Perlは独学です。
<入力ファイル>
あいうえお
あいうえお
かきくけこ
あいうえお
<出力期待値その1>
あいうえお,重複しています
あいうえお,重複しています
かきくけこ
あいうえお,重複しています
<出力期待値その2>
あいうえお,重複しています
あいうえお,重複しています
かきくけこ
あいうえお
<プログラムの要約>
open(IN,$input_file); # 入力ファイルを読み込み
@BASE = <IN>;
close(IN);
@BASE_2 = @BASE ; # 配列のコピーを作成
$count_1 = '0' ;
foreach $data_1 (@BASE) {
$count_1++ ; # 何行目を処理しているかのカウンター
$flag_1 = '0' ; # フラグの初期化
$count_2 = '0' ;
foreach $data_2 (@BASE) { # ←★ここの記述方法の質問です★
$count_2++ ;
if ( $count_1 == $count_2 ) { next; } # 自分自身の行とは比較しない
if ( $data_1 eq $data_2 ) { $flag_1 = '1' ; } # 一致したらフラグを立てる
}
if ( $flag_1 == '0' ) { # フラグが立たなかったらそのまま新しい配列へ追加
push(@kekka,$data_1);
} else { # フラグが立ったらコメントを追加して新しい配列へ
$data_1 =~ s/\n//g;
$data_3 = $data_1 . ",重複しています\n" ;
push(@kekka,$data_3);
}
}
$kekka_2 = join("",@kekka) ; # 配列のデリミタ対策
open(OUT,"> $output_file");
print OUT "$kekka_2";
close(OUT);
exit;
<質問>
上記プログラムの★マークの箇所で、
foreach $data_2 (@BASE_2) としますと、<出力期待値その1>が得られます
そして、
foreach $data_2 (@BASE) としますと、<出力期待値その2>が得られます
プログラムの途中で @BASE_2 = @BASE としていますので、一見しますと
同じ処理をしているように感じるのですけれども、実際には出力結果が異なり
ますので、何かが違うのだと思います。
その違いを教えて戴きたいです。
※投稿確認画面でTABが消えてしまいますのでTABは全角スペースに変更して
おります。
見えづらい場合には申し訳ありません
No.1ベストアンサー
- 回答日時:
foreach文はオリジナルを置き換えますので注意して使ってください。
>$data_1 =~ s/\n//g;
# オリジナル(@BASE)の対象データが書き換えられる。
ありがとうございます
最初は
あいうえお<改行コード>
あいうえお<改行コード>
かきくけこ<改行コード>
あいうえお<改行コード>
でしたけれども、foreachの最後では
あいうえお
あいうえお
かきくけこ<改行コード>
あいうえお<改行コード>
となっていて、どのデータとも重複しないのですね
難しいです
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Strawberry Perl for Windows ...
-
INDIRECT 横に再度抽出したい
-
Perlのエラーについてご教授く...
-
bashスクリプト
-
perlで2次元配列をサブルーチ...
-
Perlの全角スペース 文字化け?
-
perl の open について教えてく...
-
Perl言語について。
-
ファイルをディレクトリ分配の...
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
ファイルアイコンの左下に緑の□...
-
perlプログラミング 空白行削除
-
perlでリテラル値はメモリにど...
-
Perlで時間の計算
-
perlについて
-
perlのrequireの動き方について...
-
perlの構文でカンマの意味が分...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
pandasでまとめてインデックス...
-
<IN>; を単独で使う
-
サブルーチンの結果
-
perlで読み込んだURLを配列に入...
-
Perlのサンプルを見ていると
-
データの日付でソートをしたい
-
Perl ファイルを読込んで日付の...
-
perlの無名配列の使い方を教え...
-
Pythonの再帰関数の動作の流れ...
-
行・列の整理! perl
-
ExcelをCSV書き出す場合のシー...
-
エクセルVBA コードが同じでも...
-
awkスクリプトでダブルクォーテ...
-
batファイルでrenameができませ...
-
VBAでCSVファイルを途中行まで...
-
Windowsで複数のファイルを同じ...
-
where can I buy snowbord in t...
-
ReadLineでの読み出し行を指定する
-
バッチファイルの作り方(CSV→...
-
C言語で特定の行を抽出する方法...
おすすめ情報