ラベル Perl の投稿を表示しています。 すべての投稿を表示
ラベル Perl の投稿を表示しています。 すべての投稿を表示

2014-08-19

nkfやkkcコマンドを使わずにperlでファイルの文字コードを判定

Linuxでファイルの文字コード判定といえばnkfやkkcなどのコマンドを用いた方法が多数見受けられますが
入っていないこともあるわけで・・・
入れてしまえば良いのだけど、余計なものを入れたくないような場合に
恐らく標準的に入っているであろうperlを用いてファイルの文字コードを判定する方法です

/tmp/test.txtの文字コードを判定するのであれば
$ perl -nle 'use Encode::Guess; print Encode::Guess::guess_encoding($_,qw/shift-jis euc-jp 7bit-jis utf8/)->name;' /tmp/test.txt
utf8

2011-08-30

perlでファイルなどのデータサイズに単位をつけて丸めて表示する

次のようなサブルーチンを
nice_size(<丸めたい値>,<少数以下の桁数>)
な感じで呼び出せばOKヾ(*・∀・)ノ"

sub nice_size {
	my $fs = $_[0];	# 対象の数値
	my $dp = $_[1];	# 少数以下の桁数
	my @units = ('bytes','kB','MB','GB','TB','PB','EB','ZB','YB');
	my $u = 0;
	$dp = ($dp > 0) ? 10**$dp : 1;
	while($fs > 1024){
		$fs /= 1024;
		$u++;
	}
	if($units[$u]){ return (int($fs*$dp)/$dp)." ".$units[$u]; } else{ return int($fs); }
}

2011-06-24

Perlで例外処理をする

eval 'Encode::from_to( $$txtref, $from, $to, Encode::XMLCREF() )';
if($@){
    print "message:$@;
}else{
    print "Success";
}

$@に例外が発生した場合メッセージが補足されるので、こんな感じで行けそうです。

2011-06-03

Windows PowerShell内でPerlスクリプトを実行する

デフォルト状態でperlスクリプトを実行すると、DOS窓が新しく開いてその中で実行されてしまいました。
これをWindows PowerShell内で実行するには次のように環境変数を設定してあげればOKでしたヾ(*・∀・)ノ"
$env:pathext="${env:pathext};.pl"

2011-05-30

perlでYYYYMMDD形式の日付を得る

こんな感じでおーけーヾ(*・∀・)ノ"
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
my $yyyymmdd = sprintf("%04d%02d%02d", $year + 1900, $mon + 1, $mday);

2011-04-15

Amazon Simple Queue Service (Amazon SQS)をperlで使ってみた

オフィシャルのGetting Startを見てやってみようとしたけど、ドキュメントやらソースが古いようで上手いこと動いてくれませんでしたヽ(`Д´)ノ

てなわけで、Cpanを漁ってみるとAmazon::SQS::Simpleってのがあったのでこれを使ってみることにしましたよ(’’
まずは、インストール

cpan install Amazon::SQS::Simple
関連モジュールをインストールするかと何度か聞かれるのでyesと答えておけばインストールは成功しました。

あとは、こんな感じのサンプルスクリプトを作ってみました
#!/usr/bin/env perl                                                                                                        
use strict;
use warnings;
use Amazon::SQS::Simple;

my $access_key = $ENV{AWS_ACCESS_KEY};
my $secret_key = $ENV{AWS_SECRET_KEY};
my $queue_name = "hoge";

set_message($queue_name,'test');
print get_message($queue_name) . "\n";

sub set_message{
 # SQSオブジェクトを作成
 my $sqs = new Amazon::SQS::Simple( $access_key, $secret_key );

 # キューオブジェクトを取得
 my $q = $sqs->CreateQueue($_[0]);

 # キューにメッセージを送信
 $q->SendMessage($_[1]);
}

sub get_message{
 # SQSオブジェクトを作成
 my $sqs = new Amazon::SQS::Simple( $access_key, $secret_key );

 # キューオブジェクトを取得
 my $q = $sqs->CreateQueue($_[0]);

 # キューからメッセージを取得
 my $msg = $q->ReceiveMessage();

 # メッセージの内容を出力
 return ($msg) ? $msg->MessageBody() : "" ;
}
exit 0;

AccesskeyとSecretkeyは環境変数から読みこむようにしてるので環境変数へセット
export AWS_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxx
export AWS_SECRET_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

これであとは実行してやればSQSに値を登録して、そこから取得して表示できると思われます

2011-03-25

16進IPアドレスを10進IPアドレスに変換する

ブロードキャストアドレスffffffffの場合こんな感じ。
echo 'ffffffff' | perl -pe 's/([a-f0-9]{2})/"." . hex($1)/ieg' | cut -c2-
255.255.255.255

2011-02-02

perlでミリ秒単位の処理時間を計測する

use Time::HiRes;
my $start_time = Time::HiRes::time;

#--------------
#てきとーな処理
#--------------

#処理時間を計算して小数点以下を3桁に丸めて表示
printf("%0.3f",Time::HiRes::time - $start_time);

2010-10-07

配列から条件に一致する要素を取り出す

my @titles = ('air', 'kanon', 'clannad');
my @result = ();

foreach my $title (@titles){
    push @result,$title if($title =~ /an/);
}
なんてやってたけど
@result = grep(/an/, @array);
で良いのね・・・

スクリプトからSSHログインする

`ssh -i ssh-key-file user@host.name`;
とすると、処理がPerlから戻ってこなくなってしまった・・・
system("ssh -i ssh-key-file user@host.name");
で解決!

配列の中身を任意の区切り文字で表示する

my @dat=("a","b","c");
my $separator = "\n";

foreach (@dat){
    print "$_$separator";
}
とやっていたが
print "$_$separator",for @dat;
でも同じ出力が得られるらしい。