Perl Tips: ヒアドキュメント
2018/08/19
複数行文字列の表示
  • Perlで定型的な複数行の文字列を表示するとき、その1行1行をprintステートメントで表示するのは面倒な上に、改行コードの有無など編集ミスもしやすくなります。こんなときは ヒアドキュメント を使うのが便利です。

  • 例えば、定形複数行文字列として下記を表示したいとします。
    // ===========================================
    // Copyright Hoge Corp.
    // Revision 20180819a
    // ===========================================

  • ヒアドキュメントを使ったコードは List1 になります。ドキュメントの終了を示す文字列は任意指定です。List1 では "End Of Text" を意味する EOT を使っています。

    List 1: ヒアドキュメント使用例
    コード
      #!/usr/bin/perl -w
      use strict;
      {
          my $foo = << 'EOT';
      // ===========================================
      // Copyright Hoge Corp.
      // Revision 20180819a
      // ===========================================
      EOT
      
          print $foo;
      }
      
    出力結果
      // ===========================================
      // Copyright Hoge Corp.
      // Revision 20180819a
      // ===========================================
      

  • コーディング時にインデントを入れているのに、ドキュメント終了文字列だけは、行頭に置くのが気持ち悪いと感じる場合は、終了文字列にインデントの空白を含めてしまえばOKです。

    List 2: 終了文字列自体に空白を入れる
    コード
      #!/usr/bin/perl -w
      use strict;
      {
          my $foo = << '    EOT';
      // ===========================================
      // Copyright Hoge Corp.
      // Revision 20180819a
      // ===========================================
          EOT
      
          print $foo;
      }
      
ダブルクォートで変数展開
  • ドキュメント終了文字列をダブルクォートで囲むと、テキスト内の変数が展開されます。

    List 3: ダブルクォートで変数展開
    コード
      #!/usr/bin/perl -w
      use strict;
      {
          my $revdate = '20180819b';
          my $foo = << "    EOT";
      // ===========================================
      // Copyright Hoge Corp.
      // Revision $revdate
      // ===========================================
          EOT
      
          print $foo;
      }
      
    出力結果
      // ===========================================
      // Copyright Hoge Corp.
      // Revision 20180819b
      // ===========================================
Copyright(C) 2018 Altmo
本HPについて