プロトタイプ

#! /usr/bin/perl -w
use strict;
use Carp;

print <<EOT;
プロトタイプもよくわからん。
少しはまった
EOT

#普通の定義
sub test{
	print shift,"\t";
	print shift,"\n";
}
#定義
sub proto($$){
	print shift,"\t";
	print shift,"\n";
}


#どうなの?
#普通のに引数不足で投げてみる
&test('proto');#=>shiftできねぇよ!と叱られる、意図通り
#引数不足でプロトタイプ形式に投げてみる
&proto('proto');#=>shiftできねぇよ!と叱られる。?
#引数充足でプロトタイプ形式に投げてみる
&proto('proto','type');#=>proto type。意図通り

print <<EOT;

プロトタイプが働いてない気がするのだが。。。
ググった。
&付けて呼出しするとダメよ!とのこと。
なんじゃそれ。
あと呼出し前にプロトタイプ宣言しとけってさ

EOT

#普通のに引数を投げてみる
test('proto');#=>shiftできねぇよ!と叱られる
#引数不足でプロトタイプ形式に投げてみる
#proto('proto');#=>引数足りねぇよと怒られる。意図通り。
#引数充足でプロトタイプ形式に投げてみる
proto('proto','type');#=>proto type。意図通り

print <<EOT;

で(\$)とか
受け取った物を強制でリファレンスにするって事か?

EOT
#コレはなに?
sub proto2(\$){
 	print shift,"\n";
}
my $sc = 'proto';#テスト用
#強制モードに投げてみる
proto2($sc);#=>SCALAR(0x1002ea84)
#リファレンスを強制モードに
#proto2(\$sc);#=>ダメ。リファレンスは受け付けませんよ!引数を強制でリファレンスにするみたい
#名無し配列を投げてみる。リファレンスじゃん。上がダメならダメだろ
#proto2([1,2,3,4]);#=>ダメ。リファレンスの中身がscalarじゃないよねと叱られる。
#じゃぁこういうのはいけるんじゃ無いか?
my $scref = [1,3,4];
proto2($scref);#いけた。リファレンス値がスカラーだからね。

print <<EOT;

/$はリファレンスの中身が$って意味で、
サブルーチンの中身にはリファレンス値が渡されるって事かしら
かしら。
ある程度引数をチェック出来るのかもねぇ。。。
ここいらで溜飲下げとこ
あー、彼女欲しいなちくしょー!

EOT