dポイントプレゼントキャンペーン実施中!

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

A 回答 (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.)
    • good
    • 0

こんにちは


$" = "";
をつけたらどうでしょう
    • good
    • 0

#1 の答えがないと無意味であることは感じつつ念の為確認したいのですが,


・お使いのシステムは何ですか?
・「先頭に付いている空白」の文字コードは分かりますか?
    • good
    • 0

一つ確認したいことがあります。


@Nの出力はどのように行っていますか?
その部分を補足してください。

この回答への補足

faileに出力で

print OUT "@N";

です。

補足日時:2009/03/08 18:40
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!