Diff for array in Perl


my %tracker = ();
$tracker{$_} .= 1 for @alist;
$tracker{$_} .= 2 for @blist;
for (sort keys %tracker) {
if ($tracker{$_} !~ /1/) { print "$_ has been added to alist\n"; }
elsif ($tracker{$_} !~ /2/) { print "$_ has been deleted from alist\n"; }
else { print "$_ is in both alist and blist\n"; }
}


ref:
http://www.ksknet.net/cat34/post_143.html
2017-07-26 : Work-Linux-Perl : コメント : 0 : トラックバック : 0
Pagetop

Perl で環境変数は package で設定しよう。

サブルーチンでなくベタ書きしている部分は require 時に実行されるので、source と同じ感覚で使えます。


use lib "hoge";
require 'fuga.pl';

# in fuga.pl
package fuga;
...
$ENV{PATH} .= ;
$ENV{LD_LIBRARY_PATH} .= ;
...
1;

2016-07-28 : Work-Linux-Perl : コメント : 0 : トラックバック : 0
Pagetop

あるファイルをサーチして再帰的に処理するには File::Find::find を使おう

File::Find::find でサーチパスを指定します。
ファイル毎に再帰的にファンクションがコールされます。
ファイル名は $File::Find::name で取得し、その際にはファイルがあるディレクトリがカレントになります。

下記は Makefile をサーチしてそれぞれで clean を実行する例です。


File::Find::find (\&do_clean, "../hoge");

sub do_clean {
my $find_file = $File::Find::name;
if ($find_file =~ /\/Makefile$/) {
print $File::Find::dir . "\n";
if (-r "Makefile") {
system "make clean";
}
}
};

2016-07-15 : Work-Linux-Perl : コメント : 0 : トラックバック : 0
Pagetop

Perlでモジュールにパスを通すには環境変数 PERL5LIB に指定するのが簡単

Perlを実行する前にこんな感じでライブラリを保存しているパスを指定しておきます。

setenv PERL5LIB "./lib"

参照:
http://qiita.com/xtetsuji/items/7007df9ff3b653c7326e
2016-06-22 : Work-Linux-Perl : コメント : 0 : トラックバック : 0
Pagetop

perl で配列を使った foreach のネストは注意が必要

このような構成の場合、@fuga は最初の foreach の中で定義しないと2回目のループでは消えてしまいます。


foreach(@hoge)
foreach(@fuga)
...

2015-10-29 : Work-Linux-Perl : コメント : 0 : トラックバック : 0
Pagetop

perlでuniqを使うにはこうしよう

外部moduleを使わないのが手軽でいいです。


my @unique = do { my %seen; grep { !$seen{$_}++ } @data };


参照:
http://perlmaven.com/unique-values-in-an-array-in-perl
2015-03-24 : Work-Linux-Perl : コメント : 0 : トラックバック : 0
Pagetop

perlである要素が配列の中に存在するかを調べた結果を条件文で使うにはこうしよう

各配列の要素が$_に展開されます。
戻り値はマッチング結果の配列です。


if (grep {/$string$/} @array) {;}


参照:
http://dqn.sakusakutto.jp/2011/08/perl_10.html
2015-03-19 : Work-Linux-Perl : コメント : 0 : トラックバック : 0
Pagetop

perlでファイル名文字列の拡張子削除はこうしよう

単純な例ですが、凝ったものでなければだいたいこれでいけます。


$_ =~ s/^(.*)\..*$/$1/;

2015-03-17 : Work-Linux-Perl : コメント : 0 : トラックバック : 0
Pagetop
ホーム  次のページ »

プロフィール

zive

Author:zive
大阪在住、男

ブログ検索

月別アーカイブ

FC2カウンター