こちらはPerl Advent Calendar 2018の18日目の記事になります。昨日は、Morichanさんによる、クラス図とPerlの対応付け でした。 さて、みなさん、日頃からワンライナーは使ってますでしょうか? これまで何度となく出てきたネタかとは思いますが、Perlによるワンライナーについて改めて整理してみます。 (…本記事は今年のYAPC::Okinawa 2018 ONNASONの「Perlを中心としたワンライナーあれこれ」の加筆・訂正版ですw) ワンライナーとは 「ワンライナー」とは、たった1行だけのプログラムです。 プログラムを書きたいが、 エディタを起動するほどの手間はかけたくない、というときに威力を発揮します。 日本語で言うところの、いわゆる一行野郎です。 最近界隈で人気のシェル芸的な分野などでも使えると思います。 基本編 perlでは、コマンドラインオプションの
This document contains code snippets and data in various programming languages. It shows sample code for loops, modules, subroutines, data types, and more. Version counts from 2009 to 2018 are also included.Read less
こちらの記事で紹介されているawkでの操作について、Perlではどう書けるかを確認したものです。 http://qiita.com/b4b4r07/items/45d34a434f05aa896d69 awkは難しいけど、Perlならちょっとだけ普通のプログラミング言語に近いから何とか…(あるいは昔CGI書いてたから何とか…)というニッチ層向け。 使用するコマンドラインオプション 各オプションの詳細は perldoc perlrun コマンドで参照できます。 -e 'Perlプログラム' パラメータをそのままプログラムとして実行します。ワンライナーの根本。 -E 'Perlプログラム' -e と同じですが、いくつかの追加機能が有効になります。ワンライナーでは主に、末尾に改行を追加して print する関数 say を使えるようにするために指定します。 -n 入力の各行に対して指定したプログ
日常の中で複雑な作業をしたい時, Perlで雑なスクリプトを書いて実現することがあります. そういった時によく使うCPANモジュール達を紹介しようと思います. Path::Tiny metacpan.org ファイルの読み書きはもちろん, ファイルやディレクトリの存在確認, ディレクトリからのファイルの走査, 一時的なファイル/ディレクトリを用意... などなど, ファイルやディレクトリ操作に関するあらゆることがこのモジュール1つで実現できて便利です. Data::Printer (DDP) metacpan.org 便利で見やすいData::Dumper. 雑なスクリプトを作る時は, とにかくData::Printerで途中結果を表示しながら試行錯誤しています. papix.hatenablog.com 過去にこういう紹介記事を書いていました. papix.hatenablog.com
Data::Dumper::AutoEncode というモジュールがありまして、主に printデバッグのお供に便利な変数のダンプモジュール君です。 デファクトスタンダードであるところの Data::Dumper でダンプすると「\x{304a}\x{3067}\x{3093}」こんな感じにエスケープされてしまうマルチバイトな文字列を、 Data::Dumper::AutoEncode の eDumper という関数を使うと、自動的にエンコードして普通に読める状態で出力してくれます。 use utf8; use Data::Dumper::AutoEncode; # export `eDumper` and `Dumper` my $foo = +{ bar => 'おでん' }; print Dumper($foo); # { bar => "\x{304a}\x{3067}\x{309
Perl › バージョン情報 › here 2017年5月30日にPerl 5.26がリリースされました! Perlの登場が1987年ですから、ついに30年目を迎えます! 機能の追加 Perl 5.26におけるいくつかの機能の追加です。便利そうなものをピックアップしてみます。 インデント可能ヒアドキュメント インデント可能ヒアドキュメントの構文が追加されました。これは便利そうです。 my $message = <<~EOS; Hello World EOS 末尾の文字(ここではEOS)の位置が、左の位置になって、出力結果は以下のようになります。 Hello World エディタで、ソースコードの色付けがうまくできるようになるとさらによい感じです。 Unicode 9.0のサポート Unicode 9.0がサポートされました。Unicode 9.0でさらに追加された顔文字などを扱うことができ
use strict; use warnings; use feature 'say'; use JSON qw/ encode_json /; my $num = 10.2; my ($int, $dec) = split /\./, $num; print encode_json({ int => $int, dec => $dec });
perl5の話題。 use FooとするとFooをrequireしつつ、Foo->importが呼ばれることはよく知られているが、 use Foo ()としたときには、importは呼ばれない。 これをどういう風にして実現しているのか前から疑問に思っていた。 というのも普通の関数は「引数なし」と「空リストの引数」を区別できないからだ。 perlのソースコードをみたところ、 parseのところで「引数なし」と「空リストの引数」を区別しているとわかった。 https://github.com/Perl/perl5/blob/v5.24.0/op.c#L6048 https://github.com/Perl/perl5/blob/v5.24.0/perly.y#L346-L354 追記 import を呼ばないための記法として use Foo () が用意された、という経緯があった気がしますん
最近のplenvとCartonの運用というか, 「こういう感じでやっていっています」という話です. あらすじ: cpanm --installdeps . PerlでWebアプリなど開発する場合, cpanfileに必要なライブラリを指定し, Cartonを使ってcarton installで必要なライブラリをインストールして, 開発を進めていくのが一般的だと思います. ...が, 横着な自分は大抵cpanm --installdeps .を使って, cpanfileで指定されたライブラリをそのままPerlにインストールして開発していくことが多かったのですが, 先日それで痛い目に逢いまして, 「ちゃんとCartonを使ってやっていこう」と心に誓いました. 「きれいなPerl」でCartonを使う というわけで, コアモジュールとApp::cpanminus, Cartonだけ入った「きれい
translated by Kato Atsusi Perlは動的な、動的型付けの、高級な、スクリプト(インタープリタで解釈される)言語で、PHPやPythonとともによく比較されます。Perlのシンタックスは、昔のshellスクリプトツールから多くの部分を借りており、それにより混乱させるシンボルを使い過ぎていることで有名です。それらの大多数をGoogleで検索することは不可能です。Perlのshellスクリプトから受け継いだ遺産は、glueコード(他のスクリプトやプログラムと一緒にリンクされているスクリプト)を書くのに、大変役に立ちます。Perlは、理想的にテキストデータを処理することや、テキストデータを生成するのに適しています。Perlは広く行き渡り、有名であり、極めてポータブルで、十分にサポートされています。Perlは"There's More Than One Way To Do
Perl にはいくつかの変数宣言があります。 my our local state my による変数宣言は多くの書籍で解説されていておなじみのものですが、それ以外の変数宣言の意味がイマイチわからないという声も聞きます。というわけで、ざっとまとめてみました。 use strict が無かった時代 モダンな Perl では、use strict を書いた上で、使用する変数は my を使って宣言をするということが常識となりました。 とはいえ太古の昔は use strict もなく、変数も宣言することなく使用していました。いわゆるグローバル変数だけの世界です。 まさに原始的なシェルスクリプトの世界に近いですが、今では好ましい書き方とはされません。スコープを狭めたり、初出の変数であることを明示したりといったことを my で行うことが好ましいとされています。Perl も例に漏れず、プログラミング言語で
このエントリーは Perl 5 Advent Calender 2015 の3日目の記事です。 まだワンライナーで消耗してるの? Perl で書くワンライナーが便利というのはもうさんざん語られている気がするし自明だろうて、このたびはコマンドラインインターフェースで便利なツール群をドヤ顔でステマしたいと思います。怠惰ゆえ、もうワンライナー書くのも面倒になったらコマンドにしてしまえこのやろう、というノリですぜ、おとっつあん。 手前みそですが、できる限り便利そうなやつをピックアップするので、ひとつお付き合いください。ペコリ。 swoop まずは Statistics::Swoop をインストールすると付いてくる swoop コマンド。これは、ログのあるカラムの合計、最大、最小、レンジ、平均をさくっと算出してくれるコマンド。 $ cat log_file | swoop -f3 -d, .----
Re http://d.hatena.ne.jp/perlcodesample/20091130/1258979624, http://mt.endeworks.jp/d-6/2009/12/scriptsubimport.html スクリプトとコードとテストを単一のファイルにまとめたい*1という需要が、かねて自分の中であったので教えを請うた結果、以下のような感じで書けばいいことがわかった。 #! /usr/bin/perl use modules...; my $global = ...; sub foo { ... } sub bar { ... } run_tests() if $ENV{HARNESS_ACTIVE}; # メインのコード foo(); bar(); ... sub run_tests { ... exit; } __END__ =head1 NAME my_scr
前回の(1)はこちらから。 Perlのコーディング規約 いざ学んだPerlをアウトプットしようとしたときには、Perlの自由な記述に戸惑うことがあるでしょう。ここではコーディングスタイルの一例として「Perl style guide」を、そしてコーディングをサポートするモジュールとしてPerl::CriticとPerl::Tidyを簡単に紹介します。 perlstyleでコーディングスタイルを参考にする Perlのコードをどのように書くとよいのかの一例として、Perldoc内に「Perl style guide」という形で紹介されています。ターミナルからperldoc perlstyleで参照でき、インデントやスペースの置き方、ドキュメントの書き方の指南が提供されています。 perlstyle内でも書かれているように、次の2つは必ずコードの冒頭に書いてください。 文法チェックと警告が有効に
今回のお題 foo.so に含まれている関数 void func(void) をPerlから呼び出す。 プロトタイプ宣言の通り、引数は取らないし戻り値もない(あるいは見ない)。 やりかたはいくつかあって、 普通ならXSモジュールを書いて対応する。 ただこのシンプルな目的のためにXSモジュールを書くのはいささか大袈裟すぎる。 もう少し簡単にやろうと思うと Inline::C を利用する。 これでも別に構わなかったのだけど、今回はこのPerlスクリプトをほぼ同時に並列起動する可能性があり、コンパイルが多重に走るのを避けたい。 ということで、ちょっと珍しいアプローチとしてXSモジュールのベースに使われているDynaLoaderモジュールを直接使ってみることにした。 DynaLoaderとは? Perlで昔からあるコアモジュールで、*.soファイルをロードし、その中のシンボルをモジュール名前空間に
タイトルですべてを語っていますし、http://blog.livedoor.jp/sonots/archives/32645828.html あたりを読むと良いのですがメモ。 最初にまとめると CORE::print() を使う場合は 4096 or 8192 byte 以下に収めること CORE::syswrite() なら混ざらない 男は度胸。flock(2)する ということです。 これでわかった人は読む必要ありません。 以下蛇足。 はじめに perl ではファイルハンドルに書き込むときには何も考えずに CORE::print() を利用しますが、この人はなんかいい感じにバッファリングしたり、長い文字列だったらぶった切ってくれたりしてくれます。 で、普通はバッファリングのことはみんな意識しているので以下のようにヒットアンドアウェイをやったりしますね。close() で自動的に flus
Perlはテストコードを作成するためのユーティリティも充実しています。 CPAN モジュールの多くはテストコードを備えているので、サンプルにも事欠かないでしょう。 index Perlの代表的なテストモジュール Test::More がもっとも利用されるテストモジュールのように感じますが、それ以外にも便利なモジュールはたくさんありますし、もちろん、下に挙げた以外にも便利なモジュールはあります。 コードのテスト Test::Simple Test::More Test::Base Test::Most Test::Differences Test::Deep Test::Warn Test::Exception Test::Harness Test::Fatal Test::Declare Test::Output Test::LongString Test::BinaryData Test
Perl5 の場合、Data::DPath をつかえば、 my $data = { foo => { bar => 'candy', }, }; のようなデータから、 say dpath('/foo/bar')->match($hashref); などとして、candy を簡単にとりだすことができます。 しかし、ここで、たとえば以下のように複雑なデータになってしまった場合は、DPath をつくるのがまじめんどいかんじになります。 my $data = { foo => { bar => 'candy', boz => 3, iyan => { bakan => 7, yappo => 'candy', dan => [ 'suspender', 'hige', 'candy'] }, }, }; そんな場合、以下のようなコードをささっと書いてcandyをさがしましょう。 #!/usr/bi
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く