Perl


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

Perlメモ(あとでまとめると思います)

ラクダ・ラマ本ホスィ…。
perl -d -e 42.

use strict;
use warnings;
は必須。


可読性の高いコードはPythonで書きますので、
DeepDarkFantasyなコードを目指します。

print

print("hoge")
print "hoge"
で、さらに
p"hoge"
でも
if(1){p"hoge"}
だと動いてくれなかった。
p"hoge"if(1);
こうですね。
ちなみにtrue falseのブールはperlにない。

配列

@ls = (1,2,3,4)
通常配列@lsに値を設定するときにリストを使う。

$s = (1,2,3,4)
こうやると$sの中には4が入る。
実際に()をevalすると4が返る。
この4は最後の項目の4ではなく、配列の長さの4です。

@ls(配列)をevalすると配列の個数が返る。

リストは()で括られた表現の事で、実際に作られるのは"配列"らしい。
でもすごく動的な配列ですよね。Perl.
$ls
で先頭を、
$#ls
で一番後ろの数を参照。

リファレンス

\をつけるとリファレンスに。
$i="hoge"
としたときに、
$h=\$i
print$$h
で値を見ることが可能。
配列であれば@、ハッシュであれば%で値として見れる。
スカラで参照すると定数になる。なんかconstとかpythonっぽい。
$s = \"hoge";
print $$s;

サブルーチン

subとかく。ローズサブではない。
sub func{print"hoge"}

実行時には&を使う
&func

引数渡しに()は省略できなかった、本当か後で調べる。
デバッガ上の一行だと
func
でも動く。なんだこれ。

引数は特殊変数@_に格納。
sub func{foreach$n(@_){print$n}}

変数が$で始まってるおかげでスペースを挟まなくていいなんて…。
sub func{foreach(@_){print$_}}
コレでもいけた。パールの関数は引数が無ければ()を省略できるようです。アンビリです。

戻り値は最後に評価された値が返る。明示するならreturn;
スコープ中の$_は省略可能なのでさらに下。
sub func{foreach(@_){print}}

うわすごい。

定義した文を直後に動かせるか?

結論:動いた
(sub{print"hoge"})->();

プロトタイプシンボル

関数のプロトタイプ宣言。引数の型を決められる。
sub hoge($@%&*);

こうするとhoge関数はスカラ,配列,ハッシュ,関数,(なんでもいい)の5つの引数を取る関数になる。