Perlの “@@” 記号

ググっても全然引っかからない記号の話。

以下のコードを見れば、はっ!とわかる。
https://github.com/kraih/mojo/blob/277987ea295981a2ea7ca92c7288f0973baa125b/lib/Mojo/Loader.pm#L53-L81

sub _all {
  my $class = shift;

  return $CACHE{$class} if $CACHE{$class};
  local $.;
  my $handle = do { no strict 'refs'; \*{"${class}::DATA"} };
  return {} unless fileno $handle;
  seek $handle, 0, 0;
  my $data = join '', <$handle>;

  # Ignore everything before __DATA__ (some versions seek to start of file)
  $data =~ s/^.*\n__DATA__\r?\n/\n/s;

  # Ignore everything after __END__
  $data =~ s/\n__END__\r?\n.*$/\n/s;

  # Split files
  (undef, my @files) = split /^@@\s*(.+?)\s*\r?\n/m, $data;
  # Find data
  my $all = $CACHE{$class} = {};
  while (@files) {
    my ($name, $data) = splice @files, 0, 2;
    $all->{$name} = $name =~ s/\s*\(\s*base64\s*\)$//
      && ++$BIN{$class}{$name} ? b64_decode $data : $data;
  }

  return $all;
}

もとはmojoliciousから生まれたもの、っぽい。それがXslateや他のライブラリに利用されるようになって当たり前化した模様。

インクルードパスへDATAセクションをマップする方法

https://metacpan.org/pod/Data::Section::Simple#COPYRIGHT

Copyright 2010- Tatsuhiko Miyagawa

The code to read DATA section is based on Mojo::Command get_all_data: Copyright 2008-2010 Sebastian Riedel

メソッド自体は凄くシンプルに正規表現を駆使して__DATA__を読み出しているだけ。ちなみに日本語で説明しているドキュメントは見つけられなかった。