Quine を書いてみる、ヒアドキュメントをわかりやすく

use strict;
use warnings;

sub cut {
     my $s = shift;
     $s =~ s/^  //mg;
     $s;
}
my $s = cut <<'__EoD__';
  use strict;                                                                   
  use warnings;                                                                 
                                                                                
  sub cut {                                                                     
       my $s = shift;                                                           
       $s =~ s/^  //mg;                                                         
       $s;                                                                      
  }                                                                             
  my $s = cut <<'__EoD__';                                                      
  x                                                                             
  my $t = $s;                                                                   
  $t =~ s/^/  /mg;                                                              
  $s =~ s/x/$t\__EoD__/;                                                        
  print $s;                                                                     
__EoD__                                                                         
my $t = $s;
$t =~ s/^/  /mg;
$s =~ s/x/$t\__EoD__/;
print $s;

実行結果。

[takeyuki@sunya ~]$ perl d.pl > b.pl; diff d.pl b.pl; wc -c d.pl
392 d.pl