P学習帳

書いておぼえるブログ

ハッシュレファレンスをsprintfでフォーマットしてprintする

課題

こういうハッシュレフを

my $my_info = {
  name => 'Masato',
  tall => 169,
  mass => 55,
  food => 'Sushi',
};

こうやってプリントしたい。

Name         Tall    Mass    Age     Food
Masato       169     55      33      Sushi

やり方

sprintf関数とハッシュスライスを使う。

sprintf関数の使い方

説明は以下のページがわかりやすい。

sprintf関数 - 文字列の書式指定 - Perlゼミ(サンプルコードPerl入門)

まず、ヘッダーをsprintfで出すにはこうすればできる。

  my $format = "%-12s %-7s %-7s %-7s %-7s";
  printf $format, qw(Name Tall Mass Age Food);

$formatはsprintf関数の第一引数に渡す書式だ。%-12sなどというのは左詰のxx固定長と解釈される。よってこの例は左詰で12文字の固定長になる。長さは実際にプリントする文字列に合わせる。

ハッシュスライス  

  printf $format, @$hash_ref{ qw(name tall mass age food) };