perl

if文の中でlastを使う

if (1) { print "hoge\n"; last; print "foo\n"; print "bar\n"; } # Can't "last" outside a loop block at 〜 括弧を二重にしてやると動く。知らなかった。 if (1) {{ print "hoge\n"; last; print "foo\n"; print "bar\n"; }} perlsynを参照

難読化されたJavaScriptコードを展開するスクリプトを書いた

難読化されたJavaScriptコードをコマンドラインで展開してくれるツールを 探したけどパッと見つからなかったのでOnline JavaScript beautifierで使われている js_beautify.jsというのをPerlに翻訳してみた。https://github.com/hironorism/p5-js-beautify 使…

1台サーバでFastCGIアプリをダウンタイム無く更新する方法について

なんか難しく考えていたけど実に単純な方法で出来るような気がしたのでメモ。 アプリ(fcgi_app.psgi) #!/usr/bin/env plackup -s FCGI use Plack::Handler::FCGI; my $app = sub { return [ 200, [ 'Content-Type' => 'text/html' ], [ 'BEFORE' ] ]; }; my …

何度目かのmergesortのお勉強

今度は同マージソートPerl my @b; sub merge_sort { my ($a, $low, $high) = @_; $low //= 0; $high //= @$a -1; my ($i, $j, $k); return if $low >= $high; my $mid = int( ($low + $high) / 2 ); merge_sort($a, $low, $mid); merge_sort($a, $mid+1, $hi…

何度目かのquicksortのお勉強

定本 Cプログラマのためのアルゴリズムとデータ構造 (SOFTBANK BOOKS)作者: 近藤嘉雪出版社/メーカー: ソフトバンククリエイティブ発売日: 1998/03メディア: 単行本購入: 11人 クリック: 169回この商品を含むブログ (77件) を見るtopcoderの問題を解く時に「…

YAPCに行って来た

10/13〜10/15にYAPCという主にPerl好きな方のための楽しい寄り合い的なものがありまして参加してきました。そこで気になったMarc LehmannさんのApp::Staticperlというのをとりあえず少し触ってみました。 (僕は10/15しか参加してないのでMarc Lehmannさんの…

Web::ScraperでFurlを使う

#!perl use strict; use warnings; use URI; use Web::Scraper; use Furl; { no warnings 'redefine'; *Furl::get = sub { my ($self, $uri) = @_; my $res = $self->request( method => 'GET', url => "$uri" ); return $res->as_http_response; }; } $Web:…

文字列からタイムスタンプを取得

Date::Parseというのがあった。 #!/usr/bin/env perl use strict; use warnings; use Data::Parse; my $str = '2011-01-01T00:00:00.000Z'; my $time = str2time($str);

1枚psgiファイルでchatのようなもの

前々から同時接続中のクライアントにサーバから通知というのがものすごーくやりたかったのだけどこのたびTwiggyとTatumakiのegとぶつかり稽古を重ねてようやくできた。 多分最近だとこういうのやるのにWebSocketとかでやるのかもしれないけどそれだとブラウ…

SKEの今日のスケジュール

ちょっとぶりのWeb::Scraper #!/usr/bin/env perl use strict; use warnings; use utf8; use URI; use Encode; use Web::Scraper; my $today = (localtime())[3]; my $url = 'http://www.ske48.co.jp/schedule/calendar.php'; my %type = ( stage => '公演',…

AKBの今日のスケジュール

久しぶりのWeb::Scraper #!/usr/bin/env perl use strict; use warnings; use URI; use Encode; use POSIX qw/strftime/; use Web::Scraper; my $today = strftime("%Y%m%d", localtime); my $file = substr($today, 0, 6).".html"; my $url = 'http://www.a…

Acme::AKB48のインストール

Acme::AKB48をAPIにしたいなーと思ってインストールしようとしたら微妙にてこずったので。まず、https://github.com/hidek/Acme-AKB48から落としてきて $ cpanm -l ./extlib/ hidek-Acme-AKB48-9a599ea.tar.gz と普通にやったらテストでこけた。 Module::Lis…

Mojoliciousが1.0になったので試してみた

Hello Worldレベルで特に中身はない雛形作成 $ mojo generate app MyApp my_appというディレクトリの下に色々作られる。 そしたらとりあえずplackupで確認。 $ cd my_app $ plackup script/my_app 下記にアクセスしてみるとwelcome的なページがでる。 http:/…

DBIx::TransactionManagerのメカニズム

#!/usr/bin/env perl use strict; use warnings; use DBI; use DBIx::TransactionManager; use Try::Tiny; use Test::More; my $dbh = DBI->connect("dbi:SQLite:"); my $tm = DBIx::TransactionManager->new($dbh); $dbh->do(q{ CREATE TABLE user (id INTE…

AnyEvent::Twitter::Streamで取得結果をブラウザに垂れ流す

#!/usr/bin/env perl use strict; use warnings; use Config::Pit; use AnyEvent::Twitter::Stream; use AnyEvent::Socket; use Data::Section::Simple; use Text::Xslate; use JSON; use HTTP::Parser::XS qw/parse_http_request/; my $config = pit_get('t…

windowsでperlスクリプトをコマンドのように使う

今までperl my_print.plみたいにいちいちやってたのだけど 以下のようにpl2batというコマンドを使えばmy_printだけで実行できるようになる。 C>pl2bat my_print ちなみにpl2batを実行するとmy_print.batという以下のようなファイルが作成されてた。 @rem = '…

Text::Xslate::Syntax::Kolonについてメモ

今日覚えたこととか。 実はKolonとはあんまり関係ないかもしれない。 #!perl use strict; use warnings; use Encode; use Text::Xslate; use Data::Section::Simple; my $vpath = Data::Section::Simple->new()->get_data_section(); my $tx = Text::Xslate-…

リストに対してバックスラッシュを適用する

#!perl use strict; use warnings; my $scalar = 'one'; my @array = qw/two three/; my %hash = (four => 'five'); my @ref = \($scalar, @array, %hash); for (@ref) { print ref $_, "\n"; } # 出力結果 # SCALAR # ARRAY # HASH 各要素に対して適用され…

DBIx::Skinnyで取得結果をテンプレに渡すとき

#!perl use strict; use warnings; use DBIx::Skinny; use Text::Xslate; use Data::Section::Simple; my $vpath = Data::Section::Simple->new()->get_data_section(); my $tx = Text::Xslate->new(path => [$vpath]); { package MyModel; use DBIx::Skinny…

HTML::ShakanのconstraintsでKATAKANAとかを使う

package MyForm; use strict; use warnings; use HTML::Shakan::Declare; use FormValidator::Lite::Constraint::Japanese; form 'add' => ( TextField( name => 'katakana', constraints => [ 'KATAKANA' ], ), TextField( name => 'hiragana', constraints…

Unicodeブロック

#!perl use strict; use warnings; use utf8; my $str = 'カタカナ'; if ($str =~ /^\p{InKatakana}+$/) { warn 'match'; } else { warn 'not match'; } 初めて知った。 FormValidator::Liteのソースを読んでたら出くわした。 詳しくはperldoc perlunicodeあ…

HTML::Shakanの使い方とか

#!perl use strict; use warnings; package My::Form; use HTML::Shakan::Declare; form 'add' => ( TextField( name => 'name', label => 'name', constraints => [ [ 'REGEXP' => qr/^[\w]+$/ ], ], ), ); package main; use CGI; use Text::Xslate qw/mar…

配列の区切り文字

print "@array";とかするときの配列要素の区切り文字は「$"」で変えられる。特殊変数の逆引きが欲しい。

プロトタイプ

#!perl use strict; use warnings; sub hoge (\[$@%]) { warn ref $_[0]; } my $scalar = 'scalar'; my @array = qw/1 2 3/; my %hash = ( key => 'value' ); hoge $scalar; # SCALAR hoge @array; # ARRAY hoge %hash; # HASH となる。 Readonlyで見た。