Hatena::Grouparaistudy

iwasekiの日記

2007-07-15

[]6章 入出力の基本 はてなブックマーク - 6章 入出力の基本 - iwasekiの日記

ここを更新せずにいた間に、色々書いた6章の下書きがどっかいっちゃった(´・ω・`)

残ってた分だけ更新しとく。

ダイヤモンド演算子

while(<>){
	print;
}

というソースをhogehoge.plとして保存して、

perl hogehoge.pl mogemoge.txt

と実行すれば、mogemoge.txtの値を1行ずつ$_に読み込んでprintする。引数を与えない場合は標準入力となる。whileだと1行ずつ読んで、foreachだと全体を読み込んでから処理をする。ちなみにchompしたければprintの前に「chomp;」と書くだけでいい。

ダイヤモンド演算子は、@ARGV配列)の内容を見て処理をする。引数が渡されると@ARGVリストとしてセットされ、順番に処理される。何もなければ標準入力を待つ。

2つのprint文の出力結果に違いがでる - iwasekiの日記 - 勉強会(仮)で書いた疑問がリャマ本に書いてあった。

print @array;
print "@array";

例えば、@arrayにqw / fred barney betty /という値が入っていたら、1行目はfredbarnybettyと表示し、2行目はfred barney bettyと間にスペースを空けて表示します。

つまり、2行目は配列変数展開されているということ。ちなみに、2行目を使う場合、chompしていないと実行結果の2つ目*1以降から頭にスペースが入ってしまうので、ちゃんとchompしましょう。


printf

出力を指定したフォーマットに合わせて出力する。

%g自動的に浮動小数点数、整数指数形式のどれかを選ぶ
%d10進整数(小数点以下切捨て)
%s文字列
%f浮動小数点数

フォーマットを指定する際、%の後に数値を指定すると、それを出力桁数として表示する。その時整数だと右寄せ、負数だと左寄せ。パーセント記号を表示させたい場合は%%を使う。


練習問題

練習問題1
#!/usr/bin/perl

use warnings;

print reverse <>;
練習問題2
#!/usr/bin/perl

use strict;
use warnings;

print "値を入力してください:\n";
chomp(my @list = <STDIN>);

print "1234567890" x 6 . "\n";

foreach(@list){
        printf "%20s\n" , $_;
}
練習問題3

追加点は断念。

#!/usr/bin/perl

use strict;
use warnings;

print "カラムの幅を入力してください:\n";
chomp(my $width = <STDIN>);
print "文字列を入力してください:\n";
chomp(my @list = <STDIN>);


print "1234567890" x 6 . "\n";

foreach(@list){
        printf "%" . $width . "s\n" , $_;
}

*1:例でいうところのbarney