#!/usr/local/bin/perl
use strict;
use warnings;
# Data::Dumper はある変数のデータ構造を
# Perl のシンタックスで表現してくれるもので、
# デバッグ時など普通によく使う。
use Data::Dumper;
#require Data::Dumper;
#---------------------------------------------------------
print "Content-type: text/html; charset=utf-8\n\n"; # \n一つでは、表示異常となる。
print "\n";
print "
\n";
print "CGIのテスト\n";
print "\n";
print "\n";
print "u------------------
\n";
my $data = {
name => 'Ultra Seven',
human => 'Dan Moroboshi',
transform => 'glasses',
power => ['Emerium Beam', 'Eye Slugger', 'Wide Shot'],
};
print Dumper $data;
print "
\n";
#======================================
my $scal0 = 'a';
my @array = ('a', 'b', 3, 'z');
my %hash = ('i'=>'い', 'j'=>'じぇー', 'k'=>'けー');
print "---------
\n";
print Dumper $scal0;
print "
\n";
print "---------
\n";
#リファレンス渡しにしているのは、複数の引数を渡したと見なされ無い様にするため。
print Dumper \@array;
print "
\n";
print "---------
\n";
#ハッシュも同じ様な理由で、リファレンス渡しにしている。
print Dumper \%hash;
print "
\n";
print "---------
\n";
# 型グロブ
# *typedglob;
# シンボルテーブルのエントリーを表現する。
# 名前が同じで、ファニー文字($, @, %)だけが異なる変数
our $num = 11;
our @num = (12, 13);
our %num = (key => 14);
# 名前が同じサブルーチン
sub num {
return 15;
}
print "1-1: シンボルテーブルから、変数にアクセスする。
\n";
my $num_symbol = ${$main::{num}};# ${ } で括ると、スカラーのエントリ
my @num_symbol = @{$main::{num}};# @{ } で括ると、配列のエントリ
my %num_symbol = %{$main::{num}};# %{ } で括ると、ハッシュのエントリ
print "1-2: シンボルテーブルから、サブルーチンを呼び出す。
\n";
my $ret_symbol = &{$main::{num}}; # &{ } で括ると,サブルーチンのエントリ
print Data::Dumper->Dump([$num_symbol], ['*num_symbol']);
print "
\n";
print Data::Dumper->Dump([\@num_symbol], ['*num_symbol']);
print "
\n";
print Data::Dumper->Dump([\%num_symbol], ['*num_symbol']);
print "
\n";
print "\$ret_from_symbol = $ret_symbol
\n\n";
print "2-1: 型グロブから、変数にアクセスする。
\n";
my $num_typedglob = ${*main::num}; # ${ } で括ると、スカラーのエントリ
my @num_typedglob = @{*main::num}; # @{ } で括ると、配列のエントリが
my %num_typedglob = %{*main::num}; # %{ } で括ると、ハッシュのエントリ
print "2-2: 型グロブから、サブルーチンを呼び出す。
\n";
my $ret_typedglob = &{*main::num};
print Data::Dumper->Dump([$num_typedglob], ['*num_typedglob']);
print "
\n";
print Data::Dumper->Dump([\@num_typedglob], ['*num_typedglob']);
print "
\n";
print Data::Dumper->Dump([\%num_typedglob], ['*num_typedglob']);
print "
\n";
print "\$ret_from_typedglob = $ret_typedglob
\n\n";
my $name = 'taro';
my $persons_ref = [
['Tomo', 16],
['Ken', 28]
];
my $age_hash_ref = {
Tomo => 16,
Ken => 28,
};
# 1: スカラー変数を出力する
print "1 : スカラー変数を出力する
\n";
print Data::Dumper->Dump([$name] , ['$name']);
print "
\n";
# 2 配列のリファレンスを出力する
print "2 : 配列のリファレンスを出力する
\n";
print Data::Dumper->Dump([$persons_ref], ['$persons_ref']);
print "
\n";
# 2' 配列のリファレンスをデリファレンスして出力する
print "2' : 配列のリファレンスをデリファレンスして出力する
\n";
print Data::Dumper->Dump([$persons_ref], ['*persons']);
print "
\n";
# 3 ハッシュのリファレンスを出力する
print "3 : ハッシュのリファレンスを出力する
\n";
print Data::Dumper->Dump([$age_hash_ref], ['$age_hash_ref']);
print "
\n";
# 3' ハッシュのリファレンスをデリファレンスして出力する
print "3' : ハッシュのリファレンスをデリファレンスして出力する
\n";
print Data::Dumper->Dump([$age_hash_ref], ['*age_hash']);
print "
\n";
# 4 変数をまとめて出力する
print "4 : まとめて出力
\n";
print Data::Dumper->Dump(
[$name, $persons_ref, $age_hash_ref],
[qw/$name *persons *age_hash/]
);
print "
\n";
print Data::Dumper->Dump(
[$name, $persons_ref, $age_hash_ref],
[qw/$名前 *人名 *年齢/]
);
print "
\n";
print "d------------------
\n";
print "\n";
print "\n";