Perl入門ゼミ

テキスト処理、Linuxサーバー管理、Web開発ならPerl
  1. Perl
  2. モジュール作成
  3. here

シンボルテーブルの中身を覗いてみる

Perlは、シンボルテーブルというものを持ち、プログラマーが、それを参照したり、変更を加えたりすることができます。Perlは、他の言語に比べて、柔軟で、高い適応力を持ちますが、その力をを生み出している機能のひとつがシンボルテーブルです。

シンボルテーブルは、%main:: という名前の単なるハッシュです。%main:: というハッシュから、実行されているスクリプトの持つすべてのサブルーチンとパッケージ変数を知ることができます。( レキシカル変数を除く )

シンボルテーブルの内容を覗いてみる

# mainパッケージの内容を含むシンボルテーブル
%main::
# %main:: の別名
%::

シンボルテーブルを通じて、パッケージ変数の内容を知る

our $num = 1;
${$main::{num}};

詳しい説明は、型グロブの解説で、説明します。ここでは、シンボルテーブルから、パッケージ変数の内容やサブルーチンの内容を知ることができるというPerlの機能について、覚えておいてください。

シンボルテーブルを中身を出力するサンプルです。

use strict;
use warnings;

# シンボルテーブルを覗いてみる。
# このサブルーチンは、コンパイル時に、シンボルテーブルに登録される。
# パッケージ宣言を、行っていないので、暗黙的にmain パッケージに属するものと
# されます。

our $num = 1;

sub func {
  return 2;
}

print "1: シンボルテーブルを覗いてみる\n";
require Data::Dumper;
print # シンボルテーブルは、単なるハッシュです。
# main パッケージに、属するものは、
# %main:: という名前で、参照できます。
Data::Dumper->Dump([\%main::], [qw( *main:: )]),"\n";

print "2:mainパッケージの num と func の内容を見る。\n";
print $main::{ num },"\n";
# main:: の別名として、 :: も使うことができます。 
print $::{ num }, "\n";

print $main::{ func }, "\n";
print $::{ func }, "\n\n";

print "3: シンボルテーブルから、変数の内容を取得する。\n";
# ${ } で、'*main::num' から、スカラー変数を取り出す。
my $num_from_symbol = ${$main::{num}};
print $num_from_symbol;

出力結果の意味

print $main::{num};
# 出力結果
*main::num

上記の出力結果は、 *main::num と表示されます。* 記号は、型グロブを表現する記号です。型グロブは、次回説明。

  • Perlとはテキスト処理の記述性とパフォーマンスに優れ、正規表現が言語に組み込まれているプログラミング言語です。
  • Linuxサーバーでのフィルタリングプログラム、複数行の文字列を処理、ファイル内容の検索・置換などが得意
  • Perlはgitopensslなど広く普及したUnix/Linuxミドルウェアの補助ツールとして採用実績あり。後方互換性とポータビリティの高さがひとつの理由と推測。
  • 大量のテキストを扱うWeb開発も得意。ロングテールSEOを意識したWebサイト、アドテクやソーシャルゲームでの50ms以内のJSONの生成など。