揮発性のメモ2

http://d.hatena.ne.jp/iww/

perl

perlで、真偽値の戻り値

perlで、あらかじめ判定しておいた真偽値を変数に入れておいて あとでそれをif文とかで参照するのってどうやるのが一般的なんだろう my %hoge; $hoge{a} = 1; my $boola = exists $hoge{a}; # 真 my $boolb = exists $hoge{b}; # 偽 print("'$boola'\n"); # …

perlで、n文字ずつ分割する

3文字ずつ分割し、余った分もちゃんと取得する my $line = "abcdefg"; my @list = $line =~ /.{1,3}/g; for my $s (@list){ print "$s\n"; } abc def gできた my @list = $line =~ /.{3}/g; とすると、3文字未満が捨てられちゃうので注意する

Windowsのperl

Strawberry Perl Windows用のperlのひとつ 人気があるらしい strawberryperl.com Strawberry PerlをWindowsにインストールする - Perlゼミ berrewberry Windows用の perlbrew らしい。 GitHub - stevieb9/berrybrew: Perlbrew for Windows! perlbrew 好きな…

dmesgのuptime部分を日付にする 2

dmesg の時間表記を日時に変換するやつ #!/usr/bin/perl my $btime = `grep btime /proc/stat|cut -b7-`; open(my $fh, "dmesg |") or die("open"); while(<$fh>){ if( $_ =~ m/^\[\s*(\d+)\.\d*\] (.*)$/ ){ my $time = $1; my $text = $2; my ($S,$M,$H,$d…

diffの結果を使ってdiffしやすくするやつ

diff -rq の出力結果を見ながら、さらに差分とったりコピーしたりをよくするんだけど Files /tmp/hoge/www/test.html and /opt/piyo/www/test.html differ Only in /opt/piyo/www: test.html.bak みたいに Files ○○ and △△ differ とか余計な文字列が入って…

デバイス名、IPアドレス、ネットマスク のリストを出力する

$ ip -o a s| perl -nle 'if(/^\d+: (\w+)\s+inet ([\d\.]+)\/(\d+) /){ $e=join(".", unpack("C*",pack("N",0x100000000-(2**(32-$3)))));print "$1\t$2\t$e"}' lo 127.0.0.1 255.0.0.0 eth0 172.16.1.1 255.255.0.0 usb0 192.168.7.2 255.255.255.252

perlでtouch

ファイルを作って時刻を更新する if(open(my $tmpfh, ">>", '/tmp/hoge.text')){ close($tmpfh); } utime(undef, undef, "/tmp/hoge.text"); ファイルを作成する - Perl入門ゼミ perl で touch | 裏表(Phinloda のもう裏だか表だか分からないページ) Perlの…

perlのCGIでのファイルアップロード処理

最低限のコードで use File::Copy; use CGI; my $cgi = new CGI; # 仮ファイルが勝手に作られ、勝手に消える my $upfile = $cgi->param('upfile'); # アップロードしたときのファイル名(hoge.txtとか) my $tmpfile = $cgi->tmpFileName($upfile); # アップロ…

PhpStormで、perlのコメントを折りたたまない

コメントが折りたたまれてしまうのを防ぐには メニューの File⇒Settings から Editor⇒General⇒Code Folding の一番下 Perl5の ☑ Sequentional line comments のチェックマークをオフにする

エスケープシーケンス除去

cvs diff | perl -pe 's/\e\[[;\d]+[mk]//g' cvs diff | sed -r "s:\x1B\[[0-9;]*[mK]::g" ANSI カラーシーケンスを除去するコマンド - わからん ANSIエスケープシーケンスを除去する · GitHub

STARTとENDに挟まれた行を別のファイルと置換する

a.txt the world stop time START this is my world END and time resumesa.txt のうち、START と END に挟まれた部分を別ファイルb.txtと置換する ただしSTARTとENDの行は残す sedの場合 sed -n '1,/START/p' a.txt; cat b.txt; sed -n '/END/,$p' a.txt pe…

16進の文字列を文字にして吐くプログラム

#!/usr/bin/perl $hex = $ARGV[0]; $bin = pack('H*',$hex); print $bin; Perlの組み込み関数 pack の翻訳 - perldoc.jp

連番のURLを展開する

./tenkai.pl http://example.com/[7-11].pdfで http://example.com/7.pdf http://example.com/8.pdf http://example.com/9.pdf http://example.com/10.pdf http://example.com/11.pdfに展開するスクリプト #!/usr/bin/perl $url = $ARGV[0]; $url =~ /^(.*)\…

特定の文字が出るまでテキスト(バイナリかも)を表示する

\0が出てくるまで表示 cat b.txt | perl -ne '$a=index($_,"\0"); if($a<0){ print $_ }else{ print substr($_,0,$a); exit; }'

日付フォーマットの変換

"Aug 2 17:34:10" を "2013-08-02 17:34:10" に変換する DateTimeモジュール http://ido.nu/kuma/2007/05/09/datetimeformat-summary/ によると、"Aug 2 17:34:10" は DateTime::Format::HTTP のフォーマットに近そう。 http://iandeth.dyndns.org/mt/ian/ar…

ファイルの内容を全て文字列に読み込む

プロセス生成のコストとか気になったらちゃんと書き直す。気にならなければこのまま。 my $text = `cat a.txt`; In Perl, how can I read an entire file into a string? - Stack Overflow my $text = do { local $/=undef; open(my $fh,"a.txt"); <$fh> }; …

スクリプト自身のディレクトリ名を取得する

File::Basename - perldoc.perl.org Cwd - perldoc.perl.org #!/usr/bin/perl use File::Basename; use Cwd 'abs_path'; # my $mydir = abs_path(dirname($0)); my $mydir = dirname(abs_path($0)); print "$mydir\n"; abs_path(dirname( の順での呼び出しの…

ヒアドキュメント

#!/usr/bin/perl $a="aaaaa"; print << "__HOGEHOGE__"; # ←ここのセミコロンを忘れると start -----$a----- end __HOGEHOGE__ print "END\n"; # ←ここでエラーになる

Config::Simpleのバグ?

Config::Simple 4.59 では、ハッシュが空っぽの状態からは 新たに変数を追加できない。 #!/usr/bin/perl use strict; use warnings; use diagnostics; use Config::Simple '-strict'; my $cfg = new Config::Simple; $cfg->read('/tmp/test.conf'); #★ここで…

環境変数の設定

print `LANG=C aplay -l`; $ENV{"LANG"} = "C"; print `aplay -l`;

入力デバイスの入力をperlで見る

USBヘッドセットについてるボタンの押されっぷりとかを取得する話 Linux Input Subsystemの使い方 とりあえずSYNとかそういうのよくわからないので全部出す #!/usr/bin/perl open(my $fh, $ARGV[0]) or die; binmode($fh); while( read($fh, my $buf, 16) ){…

正規表現でマッチした文字列を取得する

グループ $s = "2013/11/12"; ($y,$m,$d) = $s =~ /(\d+)\/(\d+)\/(\d+)/; print "$1-$2-$3\n"; print "$y-$m-$d\n"; 2013-11-12 2013-11-12 複数マッチ $s = "456__123___789"; @m = $s =~ /[\d]+/g; print "@m\n"; 456 123 789参考:perl で正規表現にマッ…

タブをスペースに変換する

指定したファイルの ソースのタブ文字を、好きな幅でスペースに一括で変換する $ perl -MText::Tabs -i -ne 'BEGIN{$tabstop=4} print expand $_' *.cpp *.h $tabstopというのがなんとグローバル変数なので、これでタブ幅を何文字分か指定する。 参考 タブと…

Config::Simpleをインストール

CPANとか使い方知らんし # apt-cache search Config::Simple # apt-get install libconfig-simple-perl

文字列の改行コードをCRLFからLFにする

行末のCRLFを消してLFだけにする perl -i -lpe 'BEGIN{$/="\r\n"}' a.txt -lは入力を自動chompする。 chompは行末のセパレータを削除する。 セパレータは$/で定義されている。 参考:[Perl]小話:多くの人に誤解されている chomp 君の地位を向上させてみる -…

ファイル一覧

あるディレクトリの最初のファイル名だけ表示するスクリプト 1:#!/usr/bin/perl 2:use strict; use warnings; 3: 4:if( opendir(my $dh, "/tmp/hoge/") ){ 5: print "dh=$dh\n"; 6: if( my $f = readdir $dh ){ 7: print "f=$f\n"; 8: } 9: closedir $dh; 10…

Time::Piece で日時の計算がおかしい

1年ごとの日付を表示してみる #!/usr/bin/perl use Time::Piece; use Time::Seconds; my $tp = localtime; for( my $i=0; $i<13; $i++ ){ $tp += ONE_YEAR; print $tp->strftime("%F %T\n"); } $ ./hoge.pl 2014-08-20 17:10:07 2015-08-20 22:58:57 2016-08…

エラー終了時にスタックトレースを出力する

なんかエラーで止まっちゃうときに、どこで止まったかを知るには、use diagnostics; をつかう。 1: #!/usr/bin/perl 2: 3: use strict; use warnings; 4: use diagnostics; 5: 6: use Time::Piece; 7: use Time::Seconds; 8: 9: sub henkan{ 10: my $timesta…

JDでDAT落ちしたログを消去する

Tips - JD for Linux Wiki - JD for Linux - OSDN これだと消し忘れが残るので一応全部消すように変更した #!/bin/sh DIR=${JD_CACHE:-~/.jd} find $DIR -type f -regex ".*/info/[0-9]+\.info$" \ | xargs grep -H "status =" \ | perl -nle '/^(.*)\/info\…

perlでCSVファイルの一部分を加工

900102,123,456 ⇒ 1990-01-02,123,456 CSVファイルの一部分を加工するときは、カンマで分解して加工してまたくっつける perl -nle '@a=split /,/; ($y,$m,$d)=($a[0]=~/(\d\d)(\d\d)(\d\d)/); $a[0]="19$y-$m-$d"; print join(",",@a);'