- ベストアンサー
perlのpushについてです。
お世話になります。perlのpushについてです。 データファイルを読み@XXに入れます。 実際はもうちょっと複雑なのですが、 foreach $DATA (@XX){$CHECK=''; ($A,$B)=split(/\,/$DATA); # $Bには改行コードを含んでいます。 if ($A==1){$A=2;$CHECK=1;} if ($A==2){$A=3;$CHECK=1;} if ($A==3 and $B==1){$A=1;$B=9;$CHECK=1;} if ($CHECK==1){ push(@N,"$A,$B");}else{ push(@N,"$DATA"9;} } として、@Nをファイルに出力すると1行目を除き、 行の先頭になぜか空白が付いてしまいます。 別のスクリプトで読むときに数字以外は削除というような 文を加えても削除できず、 if ( $A eq '1'){・・・・ としたときにマッチしてくれません。 よって、この最初にファイルに書き出す際に空白が付かないように したいのですが、何故付いてしまうのか?、回避方法は? ご指導頂けたら幸いです。 付いてしまいます。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
補足ありがとうございます。 >print OUT "@N"; この、ダブルクォートでくくっているのが原因です。 "$var" とか、"@N"のように変数をダブルクォートでくくった場合 variable interpolation といって、変数の内容が展開されますが 配列の場合は#3の方の回答にある特殊変数$"の内容が要素の間に挟まるようになっています。 そしてその変数のデフォルト値が空白なので、空白が湧いて出てくるように見えるのです。 回避方法は#3の通り$"に空文字列を設定するか、あるいは ダブルクォートでくくらずに print @N; で良いと思います。 以下ドキュメント(perldoc perlvarで確認できます)から。 $" This is like $, except that it applies to array and slice values interpolated into a double-quoted string (or similar interpreted string). Default is a space. (Mnemonic: obvious, I think.)
その他の回答 (3)
- moon_piyo
- ベストアンサー率60% (88/146)
こんにちは $" = ""; をつけたらどうでしょう
- Tacosan
- ベストアンサー率23% (3656/15482)
#1 の答えがないと無意味であることは感じつつ念の為確認したいのですが, ・お使いのシステムは何ですか? ・「先頭に付いている空白」の文字コードは分かりますか?
- sakusaker7
- ベストアンサー率62% (800/1280)
一つ確認したいことがあります。 @Nの出力はどのように行っていますか? その部分を補足してください。
補足
faileに出力で print OUT "@N"; です。