Perl日記

日々の知ったことのメモなどです。Perlは最近やってないです。

2010-01-01から1年間の記事一覧

packageについて3

packageはブロックであり、クラスであるので、クラスにインポートされた関数は他のクラスで使うことはできない。 #!/usr/bin/env perl use strict; use warnings; package Foo; use Digest::MD5 qw/ md5_hex /; package main; print md5_hex('aiueo'), "\n";…

packageについて2

packageとはクラスである。 #!/usr/bin/env perl use strict; use warnings; package X; sub new { bless {}, $_[0] } sub x { print "x\n" } package Y; use base 'X'; sub y { print "y\n" } package Z; use base 'Y'; sub z { print "z\n" } package main…

packageについて1

packageとはブロックである。 #!/usr/bin/env perl use strict; use warnings; my $main_lex = 'main_lex'; our $main_our = 'main_our'; package Foo; print $main_lex, "\n"; print $main_our, "\n"; __END__ main_lex main_ourpackageとはブロックである…

URIからTitle取得

すごく簡単にHTMLからTitleをとりたい。 rightgo09/URI-Tag · GitHub まだすごく適当だけど晒してしまう。 こんな感じ。 use URI::Tag; my $title = URI::Tag->title('http://google.com'); #=> 'Google' use URI::Tag; my $ut = URI::Tag->new; $ut->uri(UR…

GithubにSSH公開鍵を設定

SSH

いろいろ勉強になったのでメモ。 githubにアカウントを作ったのはいいものの、さてどうやってさくらのレンタルサーバからpushするのかと調べていたら、SSHの公開鍵を設定しないといけないことがわかった。 こちらを参考にさせてもらった。 初心者Git日記その…

配列内の要素undef自動補完

新しく配列を作成しただけだと、中身はもちろん何もないので要素数0。 use strict; use warnings; my @ary; print scalar(@ary), "\n"; #=> 0 この時に添字[10]には何が入っているかといえば、undefがある。 print $ary[10]; してみると、Use of uninitializ…

クラスのオープン性

Ruby勉強中。その中でRubyにはクラスのオープン性、またはRubyのクラスはオープンクラス、という記述を見つける。 class Animal; end class Yahoo < Animal; end class Yahoo; end # 再オープン p Yahoo.superclass #=> Animal このように既存のクラスに対し…

ハイパー間接オブジェクト記法タイム

perldoc perlobj-Indirect Object Syntax。 また気持ち悪い書き方を覚えてしまったぜ・・・。 use strict; use warnings; use CGI; my $args = { param1 => 'value1' }; my $q = new CGI$args; #=> typoじゃないよ! my $p1 = param $q('param1'); say $p1; …

マジック1

モジュールの最後につけられる「1;」は別に1じゃなくても何でもよくて、要するにモジュールの最後の評価として true が返ればよい。 package Hoge; ... ... 10-5; とか package Hoge; ... ... "NG"; とか package Hoge; ... ... '0.0'; とかでも問題ない。 …

内容のないラベル

Any::Eventのコードをいろいろ見ていたら、ただのセミコロンにラベルが貼られていたのを見て驚いた。 AnyEvent-5.28/util/gen_uts46data ... # try to find a valid quoting character - there usually are many legal combos for (1..127) { # stay out of …

配列の添字代入

プログラミング言語Rubyを読みつつ、初めてのRubyも読み返したりして、Ruby面白!状態だけど、たまにPerlをかまってあげたくなる不思議。 今日もおや?、と思うところあったので、メモ。 配列の添え字代入 要素数 左辺 < 右辺 Rubyの場合。1.9.2。 ary = [ …

ifの戻り値

ただいまプログラミング言語RubyでRubyを学習中。 その中で目をひく記述、なんとRubyはifでの戻り値があるらしい。 year = 2010 month = 11 nendo = if month >= 4 then year elsif month <= 3 then year - 1 else raise end puts nendo #=> 2010 Perlでもこ…

組込み関数lock

10分はまったのでメモ。 現在編集中の画面をロックする、という意味のロックサブルーチンを作って、コールするプログラムを書いた。 my $lock_time = lock($arg1, $arg2, $arg3, $arg4); ... sub lock { my ($arg1, $arg2, $arg3, $arg4) = @_; ... return; …

後置ifと変数スコープ

メモ。 しかしすぐに先駆者を見つける。 後置ループにもスコープがある? - Practice of Programming疑問:mod_perl と 後置 if と my - makogの日記 ありがとうございます。 use strict; use warnings; use 5.012; my $flag = 0; my $err = 1 if $flag; # ←★…

配列の要素数とフィルタ後の要素数を比較

配列の中に、ファイルパスが入っていて、それらのファイルが全て既に存在するときだけその場で処理を返す。 my @files = ('./aaa.txt', '/tmp/bbb.txt', '~/ccc.txt'); if (@files == grep -f, @files) { return; } 割とスマート。

ループの外で宣言すると早くなる?

ループをたくさん回す処理を高速化する初歩の初歩。 - このブログは証明できない。 こちらを見て少し気になったのでPerlでベンチマークやってみた。 #!/usr/bin/env perl use strict; use warnings; use Benchmark qw/ timethese cmpthese /; my $out_of_loo…

祝福オブジェクトを祝福する

一度 bless で祝福されたオブジェクトをもう一度 bless で祝福するとどうなるんだろうと思ってやってみた。 #!/usr/bin/env perl use strict; use warnings; package Animal; sub new { my ($class, $args) = @_; bless $args, $class; } package Iron; sub …

内部文字列からUTF-8にするにはencode_utf8()を使う

あるいは、UTF-8のバイト文字列からフラグのついた内部文字列にするには、decode_utf8()を使う。 そのものっぽい名前だし。 普通のencode('utf8', $str)、decode('utf8', $str)よりも、処理速度がその方が早いようだ。 #!perl use strict; use warnings; use…

二つの変数を相互に入れる

・仕様 $aaa と $bbb という変数があり、中身はあるかもしれないし、ないかもしれない。 $aaa に値がないときには $bbb を $aaa に入れる。 $bbb に値がないときには $aaa を $bbb に入れる。 $aaa, $bbb ともに中身がない、というのは存在しない こう考えた…

相互に use すると -c で redefine になる

たとえば、Util1.pm と Util2.pm があって、それぞれ相互に use しているとする。 Util1.pm は Util2.pm の関数を使っているし、逆も同様。 Util1.pm package Util1; use strict; use warnings; use Util2; sub multiple { my ($i, $j) = @_; my $sum = 0; #…

ループ内のサブルーチン内からnext

Perl初級者のコードを見ていたら、ループ送りの next をループの中で呼んでいるサブルーチンの中でやっていた。 #!/usr/bin/env perl use strict; use warnings; LOOP : for my $i (1 .. 10) { add2($i); print "$i at LOOP.\n"; } sub add2 { my $i = shift…

print()とカッコと三項演算子

2秒くらいはまったのでメモ。 これはok。 print 1 == 1 ? 'ok' : 'ng'; #=> ok これもok。 print 'foo' eq 'foo' ? 'ok' : 'ng'; #=> ok これはng、というか1。 print ('foo' eq 'foo') ? 'ok' : 'ng'; #=> 1 1は「eq」の返却値の「true」。 なのでこれと同…

evalではstrict 'refs'でも展開(?)できる

こちらを見て。 404 Blog Not Found:perl - 実践で役立たないPerl正規表現 完全解説 そうか、evalって重ねられるんだと思ってやってみたらできた。 use strict; use warnings; my $aaa = 123; my $bbb = '$aaa'; my $ccc = '$bbb'; say eval eval eval $ccc;…

$sth->fetch は $sth->fetchrow_arrayref のエイリアス

素のDBIメモ。よく忘れてしまうので。 SELECT文をステートメントハンドル使って取得する一番短いメソッド名の fetch() は、fetchrow_arrayref()のエイリアスである。 my $sth = $dbh->prepare($sql); $sth->execute(@bind_params); #while (my $array_ref = …

AUTOLOADでメソッドを作ってるとcanで引っかからない

約2ヶ月前、can()はどのインスタンスでもできるんだよなーと思って、以下のコードを実行した。 use CGI; my $q = CGI->new; if ($q->can('header')) { print "CGI can 'header'.\n"; } else { print "CGI can't 'header'.\n"; } 実行。 CGI can't 'header'. …

ローカル・ループバック・アドレス

ネットワークスペシャリストを受けるために勉強中。 以下、知らなかったのでメモ。 いつも自分のPCを参照するときは、ホストを「localhost」か「127.0.0.1」を使用していたけれど、これを「ローカル・ループバック・アドレス」というらしい。 特別なIPアドレ…

各月の平日の数を取得する

各月の平日の数を取得する。 つまりはウィークデイ。 (いままで土日を除いた平日を「ウィークデイ」だと思っていたけれど、日曜日だけ抜く使い方もあるらしい。weekdayの意味 - 英和辞書 - goo辞書) (ここでは土日を除いた平日の数を出す) とりあえず祝日は…

YadaYada

「やだやだ演算子」が、Perl5.12.0から実装されている。 というのを、さっき perl5120delta を見ていて知った。 ...; # ←これ それにしても、英語でも「Yada Yada Operator」って、すごいネーミング…。 詳細は perlop 。 http://perldoc.perl.org/perlop.htm…

Slideshare API

今日は今まで一枚岩で割とごちゃごちゃしていたスクリプトをリファクタリングした。 久しぶりにすごく楽しく書けた気がする。 今まで学んできたこと、経験してきたことがうまく生かせられた、と主観評価。 これでもう少し楽しく書いていけそうだ。 で最近ち…

fat comma その2

基本的にハッシュの初期値を入れるときは fat comma 「=>」を使うけれど、GD::Graph の設定で syntax error が出たのでメモ。 $pie->set( 3d => 0 ); syntax error at - line 123, near "3d"へー、3d => 0 だと、「=>」の左側である「3d」をキーとして見れな…