シェル関数やJavaScriptはfunctionのみ、プログラミング言語VB6.0以前ではFunctionとSubがあるものもありますが、Perlには『function』はなく『sub』のみです。
Perlの関数にはsubを付加します。
Perlにも組み込み関数もありますが、Perlでは関数というより多くの場合ルーチン/サブルーチンと呼び、オブジェクト指向Perl(OO Perl)ではメソッドと呼びます。
sub abc ( ) {
~ ;
}
Perlではサブルーチン/メソッドを宣言する際に仮引数やその型を宣言する必要がなく、一般にこのように書きます。
sub abc {
~ ;
}
またサブルーチン名の後の( )を省略することもできます。
サブルーチンはファイル内の個数などの制限はありませんが、同名の関数名はつけないように気をつけましょう。
サブルーチンは、既定またはその定義によって引数をとるもの、とらないもの、返り値(戻り値)を返すもの、返さないものなどがあります。
Perlは、サブルーチンを呼ぶ場合には、他の多くのスクリプトやプログラミング言語同様、必要であれば引数を渡しますが、受け取る際には引数を自動的に特殊な変数に格納してくれますし、Perlが型を自動認識してくれることもあり、他の言語に見られるような関数名の後に続く( )を伴う型指定された仮引数というものがありませんから、Cにならったプロトタイプ宣言用途以外でサブルーチン宣言時に仮引数を指定することはまずありません。
尚、サブルーチンに( )や更にはその中にカンマ区切りで仮引数を記述しても、引数をとらない、引数はとるけどその数が不一致という場合でも無視されるので宣言時にはエラーになりません。
逆に言えば、無視されることを利用して仮引数を記述することもできますし、仮引数はともかく、変数に付加する$、@、%、*の接頭辞等々をプロトタイプとなるサブルーチンの丸カッコ内に指定することで引数としてとる種類を制限することは可能です。
Perlではreturn文を使うことができますが、Perlのサブルーチンは、明示的にreturnで値を返却しない場合には、呼び出したそのサブルーチン内で最後に処理された結果が戻り値(返り値)になります。
また、Perlの関数はパッケージ(モジュール)を越えない限り、そのスコープは全てグローバルです。
Perl5以降はPerlもPython等と同様、オブジェクト指向言語と呼ばれ、Perlでは、(ライブラリ)モジュールという概念、名前空間であるpackage、リファレンスをある種組み合わせてクラス(のような仕組み)を実現しており、スーパークラス、サブクラスを定義でき、多重継承を含む継承、オーバーライドなども可能となっています。
オブジェクト指向の原語である米英語のObject-Orientedを伴いObject-Oriented Perlの略称・通称としてOO Perlと呼ばれることがあります。
というよりは、むしろPerlにおいては、Object-Oriented PerlをOO Perlと略した通称を固有名詞化させて呼んでいると言った方が、よいかもしれません。
C++/Java/Pythonなどでもオブジェクト指向における(オブジェクトで定義された)関数はメソッドと呼ばれますが、Perlでも同様、オブジェクト指向スタイルの場合は、ルーチン/サブルーチンではなくメソッドと呼びます。