format

write 関数で使うフォーマットを宣言する

構文

解説

formatwrite 関数で使うフォーマットを宣言します。

次のコードは、/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 をご覧ください。