配列に配列を挿入するには、spliceを使います。
my @foo = qw(ari hituji inko cat dog);
my @baa = qw(sky tree note memo);
splice(@foo, 1, 0, @baa); # 配列fooの1番目に配列baaを挿入
my $i = 0;
foreach my $item(@foo) {
print "[$i]:$item\n";
$i++;
}
結果は以下のようになります。
[0]:ari
[1]:sky
[2]:tree
[3]:note
[4]:memo
[5]:hituji
[6]:inko
[7]:cat
[8]:dog
2013年3月7日木曜日
配列の要素を削除
配列の要素を削除するには、spliceを使います。
my @foo = qw(ari hituji inko cat dog);
splice(@foo, 2, 2); # 2番目の要素から2つ削除
my $i = 0;
foreach my $item(@foo) {
print "[$i]:$item\n";
$i++;
}
結果は以下のようになります。
[0]:ari
[1]:hituji
[2]:dog
my @foo = qw(ari hituji inko cat dog);
splice(@foo, 2, 2); # 2番目の要素から2つ削除
my $i = 0;
foreach my $item(@foo) {
print "[$i]:$item\n";
$i++;
}
結果は以下のようになります。
[0]:ari
[1]:hituji
[2]:dog
配列の全ての要素を加工する
配列の全ての要素を加工するには、mapを使います。
use utf8;
binmode STDIN, "utf8";
binmode STDOUT, "utf8";
my @foo = qw(ari hituji inko cat dog);
@hoge = map { my $hogehoge = $_."さん" } @foo;
my $i = 0;
foreach my $item(@hoge) {
print "[$i]:$item\n";
$i++;
}
結果は以下のようになります。
[0]:ariさん
[1]:hitujiさん
[2]:inkoさん
[3]:catさん
[4]:dogさん
use utf8;
binmode STDIN, "utf8";
binmode STDOUT, "utf8";
my @foo = qw(ari hituji inko cat dog);
@hoge = map { my $hogehoge = $_."さん" } @foo;
my $i = 0;
foreach my $item(@hoge) {
print "[$i]:$item\n";
$i++;
}
結果は以下のようになります。
[0]:ariさん
[1]:hitujiさん
[2]:inkoさん
[3]:catさん
[4]:dogさん
複数配列から重複しない行のみ抽出する
複数配列から重複しない行のみ抽出するには、以下のようにgrepを使います。
#!/opt/local/bin/perl
use utf8;
my @foo = qw(ari hituji inko cat dog);
my @baa = qw(cat ebi kuma hituji tora cat);
my %count;
$count{$_}++ for (@foo, @baa); # @fooと@baaの要素の数を数える
@hoge = grep { $count{$_} < 2 } keys %count; # 要素数が2より小さいもののみ抽出
my $i = 0;
foreach my $item(@hoge) {
print "[$i]:$item\n";
$i++;
}
結果は以下のようになります。
[0]:ari
[1]:inko
[2]:dog
[3]:ebi
[4]:kuma
[5]:tora
#!/opt/local/bin/perl
use utf8;
my @foo = qw(ari hituji inko cat dog);
my @baa = qw(cat ebi kuma hituji tora cat);
my %count;
$count{$_}++ for (@foo, @baa); # @fooと@baaの要素の数を数える
@hoge = grep { $count{$_} < 2 } keys %count; # 要素数が2より小さいもののみ抽出
my $i = 0;
foreach my $item(@hoge) {
print "[$i]:$item\n";
$i++;
}
結果は以下のようになります。
[0]:ari
[1]:inko
[2]:dog
[3]:ebi
[4]:kuma
[5]:tora
複数配列から重複行を抽出する
複数配列から重複行を取り出すには、grepを使うと便利です。
#!/opt/local/bin/perl
use utf8;
my @foo = qw(ari hituji inko cat dog);
my @baa = qw(cat ebi kuma hituji tora);
my %seen;
my $i = 0;
my @hoge = grep { ++$seen{$_} == 2 } (@foo, @baa);
foreach my $item(@hoge) {
print "[$i]:$item\n";
$i++;
}
結果は以下のようになります。
[0]:cat
[1]:hituji
1行目
Perlに限った話ではありませんが、ソースファイルの1行目には以下の様な記述をよく見かけます。
#!/opt/local/bin/perl
これはperl言語特有のものではなく、Linux等のシェルのお約束です。
上記の様に「#!」から始まる記述があることで、例えば普段はperlのプログラムを起動する時に、
perl hoge.pl
のように起動しますが、上記の記述があれば
hoge.pl
で起動できるようになります。(もちろん実行権限が付与されている必要があります。)
上の例では、シェルが実行権限の付いたhoge.plを開きますが、最初の行に「#!」から始まる行があることで、以降の/opt/local/bin/perlを起動し、その引数として自ファイルを渡してくれるようになります。
ですので、必ず
perl hoge.pl
等のように起動する人にとっては「#!」の行はいらないことになります。
ただし、他の人が同ファイルを起動しようとして
「hoge.pl」で起動できない!なんじゃこりゃ!?
と困ることがあるかもしれないので、お約束として付けておくのが習慣になっているようです。
ちなみに、「#!」の行は必ず1行目にある必要があります。2行めとかにあってもシェルは認識してくれません。
#!/opt/local/bin/perl
これはperl言語特有のものではなく、Linux等のシェルのお約束です。
上記の様に「#!」から始まる記述があることで、例えば普段はperlのプログラムを起動する時に、
perl hoge.pl
のように起動しますが、上記の記述があれば
hoge.pl
で起動できるようになります。(もちろん実行権限が付与されている必要があります。)
上の例では、シェルが実行権限の付いたhoge.plを開きますが、最初の行に「#!」から始まる行があることで、以降の/opt/local/bin/perlを起動し、その引数として自ファイルを渡してくれるようになります。
ですので、必ず
perl hoge.pl
等のように起動する人にとっては「#!」の行はいらないことになります。
ただし、他の人が同ファイルを起動しようとして
「hoge.pl」で起動できない!なんじゃこりゃ!?
と困ることがあるかもしれないので、お約束として付けておくのが習慣になっているようです。
ちなみに、「#!」の行は必ず1行目にある必要があります。2行めとかにあってもシェルは認識してくれません。
2013年3月6日水曜日
配列を任意の文字列で区切って表示する
joinを使えば配列を任意の文字列で区切って表示することができます。
@foo = qw(A B C D E F);
print join("\t", @foo)."\n"; # 配列をタブ区切りで表示
結果は以下のようになります。
A B C D E F
@foo = qw(A B C D E F);
print join("\t", @foo)."\n"; # 配列をタブ区切りで表示
結果は以下のようになります。
A B C D E F
登録:
投稿 (Atom)