3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Perl基本文法メモ

Posted at

#変数宣言
スカラ$
$hoge = "A";

配列@
@array = (1,2,3);

ハッシュ%
%hash = ("red"=>"apple","purple"=>"grape");

#修飾子
my
レキシカルスコープ変数:サブルーチン内で定義された場合、サブルーチンを抜けた時点で破棄される変数となる。private。ローカル変数

#構文
if

ex.pl
if($i == 0){}
elsif($i ==1){}
else{}

for

ex.pl
for(my $c = 0; $c < 100; $c++){

}

while

ex.pl
my $i=0;
while($i < 10){
        print "s";
        $i++;
}

foreach

ex.pl
foreach my $k (@arr){

} 

#サブルーチン

ex.pl
sub sroutine{
 return retval;

} 

呼ぶ時は

ex.pl
$val = &sroutine;

sub sroutine{
 return $retval;

} 

引数があるときの呼び方

ex.pl
$val = &sroutine(1,2,4);

sub sroutine{
($a,$b,$c) = @_ 

return $a + $b + $c;

} 

このように引数は@_で受け取っている。

#配列の操作
配列の添字
負の値をつけると末尾から走査する。(末尾は-1から始まる)

配列の要素数や添字の取得

ex.pl
@hoge = (100,1002,122);
$num = $#hoge; #最後の添字を取得 この場合は2
$num = @hoge; #配列の要素数を取得 この場合は3

配列のソート

ex.pl
#数値の配列のソート
@sorted = sort{$a <=> $b} @nums;
#$a $bと書いてアレばそれは昇順(小さいほうが先頭)のソートである。

#文字列の辞書順のソート
@sorted = sort($a cmp $b) @strs;

#sortして一度では並び順を確定できなかった時
sort{length $a <=> length $b || $a cmp $b} @strs;
#これは要素の文字列の長さでソートして、それで確定できなかったら辞書順ソート


C#/LinqのSelect的なもの:Map

ex.pl
my @a = (1 .. 10);
my @b = map{$_ * 2} @a;

C#/LinqのWhere的なもの:grep

ex.pl
my @c = grep{$_ %2 == 0} @b;

#ハッシュの操作
キーのリストを取得

ex.pl
my %fruit = ("red" => "apple","yellow" => "banana");
my @ks = keys %fruit;

値のリストを取得

ex.pl
my %fruit = ("red" => "apple","yellow" => "banana");
my @vs = values %fruit;

注意:
このようにして作られたキーや値の配列の順序が入れた挿入した順序とは異なる。ただし、keys-valuesの対応付けはしっかりしてる。(ハッシュで順序変更してるのかな?)

ex.pl
@sorted keys = sort{$a cmp $b} (keys %fruit);

片方だけソートすると当然対応付けが壊れるので注意。順序が必要な物は普通に配列でやったほうが良い。

また

ex.pl
while((my $kt, my $vt) = each(%days)){
        print "$kt : $vt";
}

のように、列挙することもできる。

#リファレンス
参照(実体を指し示すもの)

リファレンスを使うとハッシュの中にハッシュを格納し、ハッシュにハッシュを格納するみたいな複雑な構造が定義できる。

ex.pl
my $akami = ['maguro', 'katsuo'];
my $shiromi = ['tai', 'hirame'];
my @sushi = ($akami, $shiromi);
print $sushi[1][1]; # => hirame

例えばこれは配列のリファレンスを配列化したもの

リファレンスの簡単な書き方
-配列

ex.pl
my $array_ref = ["This","is","array-ref"];

-ハッシュ

ex.pl
my $array_ref = {"t" => "This",,"i" => "is","a" => "array-ref"];

配列は()の代わりに[]
ハッシュは()の代わりに{}を使う。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?