write 関数で使うフォーマットを宣言する
format
は write
関数で使うフォーマットを宣言します。
次のコードは、/etc/passwd
を読み取り、各カラムの幅を固定にして、
ユーザー名とホームディレクトリは左寄せ、UID と GID を右寄せにして、表形式に整形したうえで標準出力に出力します。
format HEADER =
@<<<<<<<<<<<< | @>>>>> | @>>>>> | @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
'User name', 'UID', 'GID', 'Home directory'
.
$~ = 'HEADER';
write;
print '--------------+--------+--------+--------------------------------', "\n";
open my $fh, '<', '/etc/passwd';
$~ = 'USER';
while (<$fh>) {
my @cols = split(/\:/);
my $uname = $cols[0];
my $uid = $cols[2];
my $gid = $cols[3];
my $homedir = $cols[5];
format USER =
@<<<<<<<<<<<< | @>>>>> | @>>>>> | @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$uname, $uid, $gid, $homedir
.
write;
}
このコードは次のような結果を出力します。
User name | UID | GID | Home directory
--------------+--------+--------+--------------------------------
root | 0 | 0 | /root
daemon | 1 | 1 | /usr/sbin
bin | 2 | 2 | /bin
sys | 3 | 3 | /dev
sync | 4 | 65534 | /bin
games | 5 | 60 | /usr/games
man | 6 | 12 | /var/cache/man
lp | 7 | 7 | /var/spool/lpd
mail | 8 | 8 | /var/mail
news | 9 | 9 | /var/spool/news
uucp | 10 | 10 | /var/spool/uucp
proxy | 13 | 13 | /bin
www-data | 33 | 33 | /var/www
backup | 34 | 34 | /var/backups
list | 38 | 38 | /var/list
irc | 39 | 39 | /var/run/ircd
gnats | 41 | 41 | /var/lib/gnats
nobody | 65534 | 65534 | /nonexistent
systemd-netwo | 100 | 102 | /run/systemd
systemd-resol | 101 | 103 | /run/systemd
フォーマットの記述方法は perlform をご覧ください。