• ベストアンサー

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'){・・・・ としたときにマッチしてくれません。 よって、この最初にファイルに書き出す際に空白が付かないように したいのですが、何故付いてしまうのか?、回避方法は? ご指導頂けたら幸いです。 付いてしまいます。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.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)
回答No.3

こんにちは $" = ""; をつけたらどうでしょう

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

#1 の答えがないと無意味であることは感じつつ念の為確認したいのですが, ・お使いのシステムは何ですか? ・「先頭に付いている空白」の文字コードは分かりますか?

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

一つ確認したいことがあります。 @Nの出力はどのように行っていますか? その部分を補足してください。

mobius99
質問者

補足

faileに出力で print OUT "@N"; です。

関連するQ&A

専門家に質問してみよう