Perlはサンプル・コードを試すのが簡単

僕がPerlを気に入っている理由の1つは、Perlはサンプル・コードを試すのが簡単であること。これは、他のスクリプト言語(Python、Ruby)にも当てはまる事であると思う。

僕のシナリオ:Perlの場合

0)ネット、またはPerldocでサンプルを見つける。
1)ターミナルでPerlコマンドを走らせる。(5キー・ストローク)
2)ターミナルに、コードをコピー・ペースト。(数回のマウス・クリック)
3)コントロール+D、サンプルコードが実行される。

サンプル・コードを見つけてから実行するまでに、1分以内?30秒以内?10秒以内?

僕のシナリオ:Javaの場合

0)ネット、またはPerldocでサンプルを見つける。
1)エディターを開く。VI、メモ帳、IDE?
2)サンプルコードを、コピー・ペースト
3)クラス名と同じ名前で、Javaファイルを保存。
4)Javaのコンパイラー(Javac)でコンパイル。
5)Javaを実行。

サンプル・コードを見つけてから実行するまでに、1分以上?30秒以上?確実に10秒ではサンプルコードを試せないと思う。

サンプルコードを試してみるという行為は、新しいライブラリーを使用したり、新しいテクニックを使用する時は、いつもやらなければならない。(<– 僕の場合)この行為を短縮できるPerlはアジャイル開発向きに思える。

僕は、長くJavaをやってきてJavaの事は大好きだし、JavaにはJavaの良さがあって、PerlにはPerlのよさがある。いくつかの言語をマスターして、目的に合わせて言語を使いわけるのがよいのだなー。

Perl: 関数呼び出しは値渡し or 参照渡し?

最近、こつこつPerlを学んでいるのであるが、僕が学んでいる情報元に、関数呼び出しは値渡しだって書かれていた。

Arguments are passed by value. They are copied to the default list variable (@_) where a subroutine can then access it.

ほんとに?Perlではリストとかハッシュとかガンガン使うのに値をコピーしちゃうの?うそでしょ?そんなんじゃスタックにメモリーがいくらあっても足りないじゃん。そこで、下記コードを書いてみた。

#!/usr/bin/perl
# To check if perl pass by value or reference when call subrutine
sub func{
$_[0] = 2008;
$_[1] = “Web 2.0”
}
my $number = 2007;
my $string = “Web 1.0”;
print “before $number & $string\n”;
func($number, $string);
print “after $number & $string\n”;

出力結果

before 2007 & Web 1.0
after 2008 & Web 2.0

この結果が示す通り参照渡である。

ではなぜPerlは値渡しだと言われるのだろう?少しネットで調べてみた。
関数方で、呼ばれるとすぐに

my ($abc, $def, …..) = @_;

のように、引数をローカルの変数にコピーするのが一般的なので、Perlは値渡しだと言われるらしい。

Perlには変数の前に(\)を付けてリファレンスを取得する事ができるようだ。

$string_ref = \$string;

ここは今学習中。

dankogaiさんが丁寧に説明して下さっています。
404 Blog Not Found perl – 暗黙的な参照 # @_ と $_