重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

超初歩的な質問ですみません。
今までJavaScriptやPHPを使ってきたので、関数はfunctionで記述していました。
今回Perlも覚えようと思って勉強していたらsubという見たことのない文字を見つけまして。
調べて見るとJavaScriptやPHPのfunctionと同じような働きをしているような印象を受けました。

そこでふとPerlにfunctionって無いのだろうかと思い、調べてみると以下のサイトを発見しました。
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd …
これによるとfunctionはあるそうなのですが、ここに書いてある通りに記述してみるとエラーになりました。ちなみにGoogle検索で「Perl function」と入れるとこのサイトがトップに来ましたが、それ以下の検索結果でそれらしいものは出てきませんでした。

Perlでfunctionは存在するのでしょうか?
するとしたらどのように使い、またsubとの違いはどのようなものなのでしょうか?
質問攻めで恐縮ですが、何卒宜しくお願い致します。

A 回答 (3件)

Perlには function なる名前の構文は存在しませんし,


220個くらいある予約語にもないはずです.
fで始まるのは for/foreach くらいでしょうか
何かのモジュールで拡張するとあるのかもしれませんが
「function」なんて名前を使ったら白い眼で見られそうですね(^^;

> http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd …

んーー・・・function以外にもまずい記述が
あちこちにありますね.

まず,@_ は引数ではなく,引数のリスト.
また,Perlで配列 @hoge の各要素は $hoge[1]などであって
@hoge[1] などではないです.
#Perl 6だと @hoge[1] みたいになりますけど

また,@_ そのものは参照渡しではありません.
@_ の各要素 $_[0] などが参照です.
したがって,@_ そのものを変えても問題ないのですが,
$_[0] とかを変えると痛いことになります.

sub hoge{
$_[0]=20; ##引数の$iへの別名になってるので$iを20にしてしまう
@_=(1,2,3);##けど,@_そのものを変えても$iには影響なし
}
$i=100;
print $i,"\n";###ここは100
hoge($i);
print $i;##20になってしまう.

Perlは「変数名」と「変数の実体」の束縛関係が柔軟というか
ちょっと面白い仕組みなので,逆にこのあたりはややこしい。。。

また,Cでいう「staticローカル変数の宣言がない」・・・
こういいきってしまうのは問題のような気がします.
#スコープとmyでできるので.
    • good
    • 0

Perl では値を返すかどうかに関係なく sub を使います.


ちょうど C で値を返すかどうかに関係なく「関数」と呼ぶようなもの.
ちなみに Perl の場合, 「最後に評価した値」が返り値になります. なので, return は書かなくても OK です. もちろん, 「返す値」を明確にするためにあえて return を書くこともありますし, サブルーチンの途中でどうしても return するときには当然書かなければなりません.
    • good
    • 0

Perlにfunctionなる命令の類は存在しませんし、


subが外の言語でのfunctionにあたると思って差し支えありません。

http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd …
こちらのページにsubの代わりのような記述の意味は解りかねます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!