読者です 読者をやめる 読者になる 読者になる

さわだのノート

書籍のお仕事に役立つかもしれない思いつきを記録しています。

RSS: 記事の更新情報 Rss Feed

Perl

[Perl]マルチバイト文字を含む文字列でprintfの桁合わせ

printfとかsprintfを使うときに困るのが、マルチバイト文字の扱い。桁数を指定してもがたがたに崩れてしまう。その対策を考えてみたのでメモしておく。 桁数からマルチバイト文字の文字数分を引けばいいだけだった。printf(もしくはsprintf)の第一引数の文…

PerlでYahoo!校正APIを使う

Yahoo!デベロッパーネットワークの校正支援APIをPerlから使ったときにはまったのでメモを。 校正支援APIは日本語の間違いらしきところを指摘してくれるWeb APIです。アプリケーションIDを取得すれば簡単・無料で原稿をチェックできるうえ、一日につき50,000…

QRコードをベクター画像で出力する

書籍や雑誌にQRコードを貼り付けることってよくありますよね。このQRコード、扱いが意外と面倒で、適当にサイズを拡大・縮小すると輪郭がぼやけて正確に読み込めなくなることがあります。 そこで、Perlを使ってQRコードをベクター画像として出力することにし…

Perlのオブジェクト指向プログラミングで、インスタンスにデフォルト値を設定する

そういえばPerlでオブジェクト指向プログラミングするとき、インスタンスのデフォルト値ってどうやって設定するんだろうと思って調べてみた。どうやらデフォルト値を設定したハッシュと、コンストラクタの引数として受け取ったハッシュをマージして、そいつ…

Perlのオブジェクト指向を補助するモジュールその3 Class::Accessor::Lite

Perlのオブジェクト指向はハッシュにアクセスするためのアクセサーをいちいち書かないといけないとかで、ちょっと面倒だったりします。だったらCPANモジュールでなんとかすればいいよね、ということでそれらの不満を解消するための、オブジェクト指向を補助…

Perl入学式 in Tokyo #1 に行ってきた

Perl入学式 in Tokyo #1 に行ってきた。 Perlの勉強会に行ってきた。勉強会は今回が通算2回目の参加です。やっぱり緊張します。会場はブログでもおなじみのSeesaaさんのオフィス。行ってみると以前通っていた大学のすぐ近くで驚きました。 最近Perlは元気な…

いまさらMouseでモジュールを書く

以前、少しPythonを使ってみたのですが、文字列処理や適当な書き捨てスクリプトならやっぱりPerlのほうがいいなと感じました。でも、クラスを書くなら、Pythonのほうがぜんぜん楽です。 そこで、Perlのオブジェクト指向プログラミングをサポートする、Moose…

Perlで「X営業日後」の日付を計算する

たまにExcelでスケジュール表を作ったりするのですが、今日から30営業日後の日付などを計算するのが面倒です。カレンダーで日付を数え上げていくのもアホくさいので、Perlの「Calendar」モジュールで何とかならないかと思い調べてみました。 Calendarモジュ…

Coro::LWPを使ってPerlで非同期スクレイピング!

以前、よくわかってないながらAny::Eventの紹介記事を書きました。 Perlで非同期処理を行う - takepierrot Editor Note 正直、あれ以来ぜんぜん使っていません。Any::Eventは高機能なんでしょうが、いかんせん書くのが面倒くさいです。Any::HTTPを使いながら…

bigratを使った、Perlにおける分数計算とNaN

Perlで分数の足し算ができないかなあと思い、ちょっと調べてみました。 どうやら、「bigrat」というモジュールを使えば、分数の計算ができるようです。 #!/usr/bin/env perl use v5.16; use warnings; use utf8; use open IO => qw/:utf8 :std/; use autodie…

Vimで少納言をささっと見たい

さて、ここからが本題です。この少納言、とっても便利なのですが、いちいちサイトを見に行くのは面倒です。ぼくは原稿の編集・執筆にVimを使っており、Yahoo!辞書やWeblioの類義語辞典をVimから閲覧できるようにするためのプラグインを過去に作ってみました…

Perlでsetter/getterを楽に(動的に)定義する

簡単だけど面倒なPerlのオブジェクト指向プログラミング Perlのオブジェクト指向プログラミングは、「リファレンス」さえわかっちゃえば簡単に使える分、巷で言われているよりは意外ととっつきやすいんじゃないかと思います。しかし、とっつきやすいのはいい…

bash&Perl! ワンライナーでファイル名の置換リネームをお手軽に

SkitchでHistoryに保存したファイルをドラッグ&ドロップでエクスポートすると、拡張子の前に「-1」みたいな数字がついてきました。もともとこんな感じのファイル名だったのですが、 62-1.jpg 62-2.jpg 63-1.jpg 63-2.jpg 63-3.jpgエクスポートしたファイル…

perlbrewでPerl 5.16.0を入れてみた

Perl 5.16.0がリリースされたらしいですね。 perlbrewを使うと、ホームディレクトリに複数バージョンのPerlをインストールして使い分けられるという話を聞き、この際両方試してみるかと思い、昨晩挑戦してみました。ただ、さっそく試してみたはいいものの、…

表記のゆれを確認するスクリプト

前回の記事で考えた校正用のスクリプトをちょっと書いてみます。 辞書ファイルを用意するのが面倒だったので、ひとまずは表記ゆれのチェックのみです。 #!/usr/bin/env perl use 5.12.3; use warnings; use utf8; use open IO => qw/:utf8 :std/; use URI; u…

原稿を簡単に校正してくれるモジュールを書いた

Yahoo!デベロッパーネットワークの校正支援APIを使って文章を構成してくれるモジュールを自作してみました。 Yahoo!デベロッパーネットワーク - テキスト解析 - 校正支援こちらがモジュールのスクリプト。 package Yahoo::Kosei; use 5.12.3; use warnings; …

WindowsでもMacでもLinuxでもOK! PerlでさくっとQRコードを作ろうぜ

昔、Android関連の書籍でQRコードをひとつずつ手作業で作っていたことがあります。 刺身にタンポポをのせるのと同じような、なんだかむなしい感覚に襲われました。結局その後はPowerShellとコマンドラインで使えるQRコード作成アプリを組み合わせて何とかし…

再帰呼び出しでN回連続した行を抽出する

行単位で文字列を比較し、N回連続した行を抽出するPerlのスクリプトを書いてみました。 練習がてら、あまり得意ではない再帰呼び出しを使っています。 #!/usr/bin/env perl use 5.12.3; use warnings; use utf8; use open IO => qw/:utf8 :std/; use Attribu…

Perlでコマンド置換を使ってみよう

bashやzshでは皆さんよく使っているであろうコマンド置換。 $ mv `ls | grep .txt | grep blog` Downloads/ みたいな感じで、バッククオートで囲んだところを実行して、コマンドの実行結果に置き換えてくれます。このコマンド置換、実はPerlでも使えるみたい…

Perlで日付計算する

Calendarモジュールを使うと、月またぎの日にちの引き算や、足し算で日にちを求めることができます。商品の発売日を取得して、今日から30以内に発売されていれば新商品と判定、なんて処理も簡単です。 #!/usr/bin/perl use strict; use warnings; use featur…

Perlで配列の重複要素を削除する&変数内のメタ文字無効化について

配列の重複要素を削除する方法は、ハッシュのキーに代入する方法が一般的みたいですが、それだと要素の順番がばらばらになってしまいます。 grepを使うとこんな感じでも重複要素の削除ができることに気づきました。 #!/usr/bin/perl use strict; use warning…

Perlで非同期処理を行う

書籍を作るときに、Webページのスクレイピングしたりアイコン画像をダウンロードしたりといった感じでPerlスクリプトを使うことがしばしばあります。Perlを使う前は一つ一つコピペしていたのですから、大きな進化です。ただ、取得するデータの件数が多くなる…

CSVファイルの重複を削除する

CSVファイルやExcelのファイルを編集しているとき、特定の列の要素が重複している行を取り除きたくなることがあります。例が微妙ですが、下記のような名前の一覧があったとします。 スティーブ,ジョブズ ビル,ゲイツ スティーブ,ウォズニアック スティーブ,…

カウンタ変数を使ったforループについて

同じ要素数を持った2つのリストを順々に処理したいときなどに使う、カウンタ変数付きのforループ。今までこんな感じで書いていました。 my @list1 = 1..100; my @list2 = 101..200; for (my $i = 0; $i < scalar @list1; $i++) { say "$list1[$i] + 100 => $…

Perlスクリプトにコマンド置換のリストを投げ込む

たいした話ではないのですが、Perlのスクリプトの引数に、コマンド置換の結果を投げ込めるということに今気づきました。こんな感じのスクリプトがあったとしたら、 #!/usr/bin/perl use strict; use warnings; use utf8; use Encode::Locale; use open IO =>…

Perlでクリップボードを利用する

Perlで適当に処理した文字列を、テキストファイルやターミナルに出力させてからコピペすることがよくあるのですが、なんかこれって二度手間で面倒です。「Clipboard」というモジュールを使うとPerlで直接クリップボードに書き込めるようなので、さっそく利用…

iPhoneのスクリーンショットを選別する

原稿を書いていると、まれに画像の一覧からiPhoneのスクリーンショットを選別してピックアップしたいと思うことがあります。今までに一回しかありませんでしたが……。まあ、そのとき一回だけだったんで、手作業で探したほうが早かったかもしれませんが、遊び…

正規表現使用時に利用できる特殊変数

Perlで正規表現を使用する際、以下の4つの特殊変数が利用できます。 メタ文字 説明 $& 文字列の中でパターン全体がマッチした部分を参照 $` 文字列の中でマッチに先行する部分を参照 $' 文字列の中でマッチに続く部分を参照 $+ 最後にマッチした文字列を返す…

選択範囲の文字を縦書き用にフォーマット

ライターとして原稿を書くとき、縦が器用に原稿を求められるときと横が器用に原稿を求められるときがあります。 実は、縦書きと横書きでは微妙に文章の表記やフォーマットが異なります(発注者により変わったりもしますが)。 横書きの場合、英数字は基本半…

Unicodeブロックを利用する

実家はいまだに携帯電話がまともに通じず、インターネットもないという情報鎖国状態でした。眼は休まったけど、やっぱりネットがないと落ち着きません。さて、前回PerlのUnicode文字列に対する正規表現検索がなにやらちょっと変わった動作をするというお話を…

Unicodeで正規表現検索

use utf8で挙動が変わるPerlの正規表現 言うまでもないかもしれませんが、Perlでは正規表現が利用できます。「\d」では半角数字が、「\w」で半角英数字が検索できるという便利な検索の仕組みのことです。 詳しいことは下記のサイトをご参照あれ。Perlの正規…

Web::Queryに任意のUserAgentを設定する

Web::ScraperとWeb::Query これまで、PerlでのスクレイピングにはWeb::Scraperを使ってきましたが、Web::Queryというモジュールもあるようです。Web::Query - jQuery風にスクレイピング - ”><xmp>TokuLog 改メ tokuhirom’s blog Webスクレイピング入門 - Perl Adv</xmp>…

Vimで選択範囲の文字数をカウントする

ライター/編集に必須の文字数チェック 原稿やブログの記事を書くときは、いつもVim(GVim)を使っています。 原稿をちょこちょこっと直したり、正規表現で文字列を修正したりといったことがスムーズにできるのがいいですね。しかし、ライティングになくては…

原稿を適当にXML化

原稿の整理・編集にはいつもVimを使っていますが、複数のテキストファイルに複雑な処理をかませたいときはPerlを使っています。 今週末はクリスマスなので、適当なフォーマットの原稿をXML化するためのスクリプトを書いてみました。 マジで暇だ。 #!/usr/bin…

Perlで日本語を扱うときの設定

PerlのスクリプトはいつもUTF-8で書いています。 Mac&Linux環境 MacやLinuxみたいな、ターミナルのデフォルトエンコーディングがUTF-8の環境ならこれでOK。 PerlのIOレイヤーと標準入出力(エラー出力含む)がUTF-8でエンコード/デコードされるようになり…