タグ

ブックマーク / perlcodesample.hatenadiary.jp (36)

  • if文による条件分岐 - Perl入門ゼミ

    Perl › here プログラミングを書いていると条件によって処理を変えたり、同じ処理を繰り返したくなる場合があります。 そのような場合はif文やfor文を使うことによって条件分岐と繰り返しを実現できます。 条件分岐の基礎 条件分岐の基礎を解説します。 if文 Perlで条件分岐を行うにはif文を使用します。まず最初に簡単な条件分岐を書いてみます。変数の値が「5」の場合に「OK」と出力するif文です。 my $num = 5; if ($num == 5) { print "OK\n"; } if文は以下のような構文です。条件が真になったときに、続くブロックの中が実行されます。 if (条件) { ...; } ==は比較演算子で、数値が等しい場合に真を返します。 この例の場合は、変数には5が入っているので「$num == 5」は真を返します。 そして、条件が真なので、続くブロックの中身

    if文による条件分岐 - Perl入門ゼミ
    kits
    kits 2017/05/11
    リストと配列は、スカラコンテキストでの評価のされ方はそれぞれ異なるので、記事を別にして正しく説明した方がよいと思います。(反例: if ((1,0)) { ... } は実行されません)
  • Perlの最新バージョン 5.24リリース - サブルーチンと数値計算の高速化、Unicode 8.0のサポート、文法機能強化 - Perl入門ゼミ

    Perl › バージョン情報 › here Perlの最新バージョン5.24がリリースされました。今回のリリースでは、Perlのサブルーチンと数値計算の高速がなされています。また、機能面では、Unicode 8.0のサポートがなされました。文法的な強化として、前方デリファレンスの実験的なステータスがはずされています。その他、細かなバグフィックスがなされました。 Perl 5.22に引き続きPerl 5.24では、Perlの内部コードの改善がなされています。パフォーマンスの改善という大きなメリットがありますが、いくつかの副作用もありますので、合わせて、解説します。 自分が技術的に不慣れで、安定的なPerlを望むなら、今のところPerl 5.20がおすすめです。技術的に強く、パフォーマンスの改善や新しい機能にチャレンジしたい方は、Perl 5.24にトライしてみてください。 以下で、Perl

    Perlの最新バージョン 5.24リリース - サブルーチンと数値計算の高速化、Unicode 8.0のサポート、文法機能強化 - Perl入門ゼミ
    kits
    kits 2016/05/10
  • Mojolicious 5.0がリリースされました - Perl入門ゼミ

    Perl › Mojolicious Mojolicious 5.0がリリースされました。Mojoliciousのリリース報告によるとコミュニティも広がっているようですね。Mojoliciousは、Ruby on Railsに比べると、Webフレームワークの部分に特化しているので、コンパクトで、癖がなく、非常に扱いやすい印象を受けます。 Mojolicious 5.0で追加された機能 例外ページとNot Foundページが新しくデザインされました。 簡単で拡張可能なフォームバリデーション機能の追加。 CSRFプロテクション テンプレートバリアント。スマートフォン用のデザインとPCのデザインで切り替えが簡単にできます。 Mojo::DOMの機能の強化 新しいフック: 「around_action」と「before_render」 SO_REUSEPORT: ゼロダウンタイムリスタートと高いパ

    Mojolicious 5.0がリリースされました - Perl入門ゼミ
  • 型グロブを理解する - Perl入門ゼミ

    Perl › モジュール作成 型グロブは、シンボルテーブルのエントリーを表現します。 *main::num # $main::{num} とほぼ同じ意味。 *num # パッケージ名を省略することもできます。 シンボルテーブル上の、 $main::{num} には、'*main::num' という文字列が代入されていますが、ずばりこれを表します( シンボルテーブルのエントリーと呼ばれている。たぶん )。ただし、文字列ではなく、型グロブというものになります。 パッケージ名を省略すると、現在のカレントパッケージのシンボルテーブルのエントリになります。 型グロブと変数 my $num_from_typedglob = ${*main::num}; # $numと同じ my @num_from_typedglob = @{*main::num}; # @numと同じ my %num_from_ty

    型グロブを理解する - Perl入門ゼミ
    kits
    kits 2013/09/05
    「デリファレンスではありません」perlref にて、型グロブはリファレンスと同様にデリファレンスできるとの説明あり。
  • ある文字のユニコードのコードポイントを調べる方法 - Perl入門ゼミ

    Perl › 文字コード › Unicode › コードポイント ある文字のユニコードのコードポイントを知りたい場合は、次のようにします。utf8プラグマは有効にして、ソースコードをUTF-8で保存する必要があります。 use utf8; my $str = 'あ'; # 十六進数として表示 printf "%x\n", ord($str); ord関数で文字のコードポイントを知ることができます。printf関数で%xというフォーマット指定をして16進数で表示しています。 出力結果は以下のようになり「あ」という文字のコードポイントは3042であることがわかります。 3042 Data::Dumperで簡易的に調べる Data::Dumperモジュールを使って簡易的に調べる方法もあります。Data::DumperはASCIIの範囲でない文字であれば、内部文字列を出力するときに、コードポイント

    ある文字のユニコードのコードポイントを調べる方法 - Perl入門ゼミ
    kits
    kits 2013/06/13
    コメントした。
  • 変数に型がないということの利点について考える - Perl入門ゼミ

    Perl › 読み物 PHPPerlRubyPythonなどのスクリプト言語に対して、変数に型がないということを否定的にとらえる人もいるかと思います。特にC言語やJavaなどの静的言語を使ってきた人にとっては、型がないということが不安材料として目に映ることが多いのではないかと思います。 けれども、型がないということは、当に素晴らしいことです。型がないことによって、たくさんの面倒から解放されるからです。 どのような型の値でも代入できる まず基的なこととして変数に型がなければどのような型の値でも代入できるということです。つまり、受け取るときに、どのような型の値を受け取るのかを意識する必要がありません。 my $str = 'Hello'; my $num = 1; my $nums = [1, 2, 3]; my $person = {age => 2, name => 'taro'

    変数に型がないということの利点について考える - Perl入門ゼミ
  • Unicodeで平方メートル(m2)を表現する - Perl入門ゼミ

    Perl › 文字コード 平方メートル(m2)を表示するときに、小さな2はどうやって表現したらよいのかなぁと悩んでいたら、解決方法を発見。Unicodeのコードポイントで、表現したらよいだけだった。 my $menseki = "100m\x{00B2}"; # 100平方メートル 小さな2にあたるコードポイントが00B2になります。 これは内部文字列なので、実際に出力するときは、UTF-8でエンコードする必要があります。またソースコード中で、全部の文字が内部文字列になるように「use utf8」しておきましょう。 print encode('UTF-8', $menseki); やっぱりこういうときには、Unicodeに対応しているPerlは便利だなぁと思いました。 上付き文字と下付き文字の一覧 こういうのは上付き文字と呼ぶらしいですね。上付き文字と下付き文字の一覧をブックマークで紹介し

    Unicodeで平方メートル(m2)を表現する - Perl入門ゼミ
  • Mojo::UserAgentでWeb上のコンテンツをファイルとして保存する / Mojolicious - Perl入門ゼミ

    Perl › Mojolicious Mojo::UserAgentでWeb上からファイルを取得して、保存してみましょう。次のように記述します。 use Mojo::UserAgent; my $ua = Mojo::UserAgent->new; my $file = 'google.html'; my $url = 'http://www.google.co.jp/'; $ua->get($url)->res->content->asset->move_to($file); Mojo::UserAgentにはdownloadするためのメソッドがありませんので、自力でがんばる必要があります。 getメソッドでHTTPリクエストを発行する。戻り値はMojo::Transaction::HTTPオブジェクト。 resメソッドでHTTPレスポンスを取得。戻り値は、Mojo::Message::

    Mojo::UserAgentでWeb上のコンテンツをファイルとして保存する / Mojolicious - Perl入門ゼミ
    kits
    kits 2012/05/17
    一時ファイルは $tmp = Mojo::Asset::File->new->add_chunk('') のようにして作ることもできます。(cf. asset.t)
  • Mojolicious::Liteアプリでは、最後を「1;」で終わってはいけない。 - Perl入門ゼミ

    Perl › Mojolicious Mojoliciousでは、自動的にファイルの変更を検地してくれるmorboと呼ばれるサーバーを起動して開発ができます。 morbo myapp.pl でもひとつ気をつけてほしいことがあります。実は以下のアプリケーションは正しくうごきません。 use Mojolicious::Lite; get '/' => sub { shift->render(text => 'aaa') }; app->start; 1; Perlのソースコードとしては正しく見えます。でもmorboコマンドで実行すると以下のようにエラーになります。 "myapp.pl" is not a valid application. 実は最後の1;という行が問題です。実はapp->startでスクリプトが終わっている必要があります。__DATA__セクションがある場合は、app->st

    Mojolicious::Liteアプリでは、最後を「1;」で終わってはいけない。 - Perl入門ゼミ
    kits
    kits 2012/05/04
    「空白以外をいれてはいけません」コメントは書けた。/ Mojo::Server::load_app() で読み込まれるスクリプトは Mojo のオブジェクト( $app->isa('Mojo') )を返す必要がある。
  • URLの中でコロン(:)などの予約語を使う / Mojoliciousリファレンス - Perl入門ゼミ

    Perl › Mojolicious Mojoliciousのルーターは、細かい設定などができて、とても便利です。けれども、使ってみると:と#と*と.が予約語になっているということに気づくと思います。 これらの記号をURLの中で利用したい場合はあきらめるしかないのでしょうか(#はURLの中でフラグメントとしての意味を持つので除く)。以下のような指定では正しくパラメーターを取得することができません。 # 間違い (/20101114:mainでパラメータを正しく取得できない) get '/(:date):(:id)' => sub { my $self = shift; my $date = $self->param('date'); my $id = $self->param('id'); $self->render(text => "$date $id"); }; コロンは予約語なので、

    URLの中でコロン(:)などの予約語を使う / Mojoliciousリファレンス - Perl入門ゼミ
    kits
    kits 2012/05/03
    # はfragmentの区切りであり、URIの # 以降はサーバサイドにはHTTPリクエストとしては届かないからMojoliciousでは扱えないように思う。
  • Perlは後方互換性を維持するスクリプト言語 - Perl入門ゼミ

    Perl › 読み物 後方互換性の維持という観点から見ると、二つのタイプにスクリプト言語を分類することができます。後方互換性を維持する方針を持つスクリプト言語と後方互換性を維持しない方針を持つスクリプト言語です。 後方互換性を維持する方針を持つ Perl, JavaScript 後方互換性を維持する方針を持たない Python, Ruby, PHP 各スクリプト言語の後方互換性 Perlの後方互換性 Perlは非常に高いレベルで後方互換性が維持されてきた言語です。古いバージョンのPerlで書いたスクリプトは、多くの場合新しいバージョンPerlで動かすことができますし、スクリプトの変更は最小限のものですみます。 安定性という点では、非常にPerlは定評があります。 JavaScriptの後方互換性 JavaScriptも非常に高いレベルで後方互換性が維持される言語です。ブラウザに組み込まれて

    Perlは後方互換性を維持するスクリプト言語 - Perl入門ゼミ
    kits
    kits 2012/04/30
  • Mojoliciousをサブディレクトリで運用する - Perl入門ゼミ

    Perl › Mojolicious 番環境で複数のアプリケーションをデプロイするときには、サブドメイン運用ができるのであれば、リバースプロキシ + サブドメインでのデプロイをお勧めします。難しいことを考えないでも、サブドメインごとにバーチャルホストを設定してあげれば、アプリケーションの変更がいらないからです。 でもMojoliciousを使えばサブディレクトリで運用することも可能です。リバースプロキシ + サブディレクトリで運用する方法を紹介します。httpサーバーはApacheとします。 まずApacheの設定ファイルです。 <VirtualHost *:80> ServerName perlcodesample.com <Proxy *> Order deny,allow Allow from all </Proxy> ProxyRequests Off ProxyPreserve

    Mojoliciousをサブディレクトリで運用する - Perl入門ゼミ
  • SQLiteの情報を見るためのMojoliciousプラグイン Mojolicious::Plugin::SQLiteViewerLite - Perl入門ゼミ

    お知らせ Mojolicious::Plugin::SQLiteViewerLiteはMojolicious::Plugin::DBViewerに統合されました。 Mojolicious::Plugin::SQLiteViewerLiteをCPANで公開しました。Mojoliciousのプラグインで、SQLiteのテーブル一覧やテーブルの定義をブラウザで表示させて観覧することができます。phpMyAdminの観覧専用のSQLitePerlバージョンだと思ってくれるとわかりやすいかもしれません。機能はずっとシンプルです。 先日公開した便利なMojolicious::Plugin::MySQLViewerLiteのSQLiteバージョンです。同じインターフェースで利用することができます。 Mojolicious::Plugin::SQLiteViewerLite 使い方 # Mojolici

    SQLiteの情報を見るためのMojoliciousプラグイン Mojolicious::Plugin::SQLiteViewerLite - Perl入門ゼミ
  • Encode::UTF8Mac - Mac OS Xのファイル名のエンコーディング - Perl入門ゼミ

    Perl › モジュール › here Mac OS XはUTF-8をファイルシステムのエンコーディングとして採用していると思いきや、実は少し異なり、Mac OX X独自の仕様になっています。これを正しく扱うためにはEncode::UTF8Macというモジュールを利用すると簡単です。 use Encode qw/encode decode/; use Encode::UTF8Mac; # エンコード my $byte = encode('utf-8-mac', $string); # デコード my $string = decode('utf-8-mac', $byte); useを使ってEncode::UTF8Macを読み込むと、Encodeモジュールのエンコーディングとしてutf-8-macを利用できるようになります。このエンコーディングを利用すれば、Mac OS Xのファイル名を正し

    Encode::UTF8Mac - Mac OS Xのファイル名のエンコーディング - Perl入門ゼミ
  • なぜPerlで例外処理のfinallyが特に必要と感じないかを考えてみた - Perl入門ゼミ

    Perl › 読み物 Perlでは例外を発生させるにはdieを使います。これはJava言語でいうthrowにあたります。例外をキャッチするにはevalを使用します。これはJava言語でいうcatchにあたります。例外が発生したかどうかは$@にメッセージが設定されたかで判定できます。 # Perlの例外処理 eval { # 例外を発生させる処理 } if ($@) { } Perlには知ってのとおりfinally文がありません。でも特に困るというような話を聞きません。なぜでしょうか。finally文で実行される処理は、ほとんどの場合、外部リソースの解放です。ファイルを閉じたり、一時ファイルを削除したり、DBへの接続を解放したりする処理です。このような処理をfinally文で実行したいという要望があります。 なぜJavaではfinally文は必須なのでしょうか。JavaではGCが「世代別GC

    なぜPerlで例外処理のfinallyが特に必要と感じないかを考えてみた - Perl入門ゼミ
    kits
    kits 2011/11/13
  • Webアプリケーション作成のためのHTMLの基礎 - サンプルコードによるPerl入門

    Perl › Mojolicious PerlでWebアプリケーションを作成するための前提知識としてHTMLの基を解説します。これだけ知っていれば、HTMLを自由に記述することができる程度のものを目指しました。タグの役割を中心に解説します。通常のタグ、フォームタグ、ヘッダ部で利用するタグなどを解説しています。日語などの扱い方、CSSJavaScriptの利用の仕方などにも触れています。画面のレイアウトや色については、CSSを解説するときに解説します。 基礎の基礎 HTMLのフォーマットです。 <!DOCTYPE html> <html> <head> <title>タイトル</title> </head> <body> 内容 </body> </html> HTMLでは「<」と「>」で囲まれたタグというものを使って文書を記述します。HTML文書は「」で始まって「」で終わります。「」と

    Webアプリケーション作成のためのHTMLの基礎 - サンプルコードによるPerl入門
    kits
    kits 2011/05/26
    この記事を基本とは思ってほしくない(仕様に基いていない点(HTML4? HTML5?)、その一方で中途半端にXHTMLに言及している点などから)
  • MojoliciousでCSSなどの静的ファイルを利用する - Perl入門ゼミ

    Perl › Mojolicious 今回は静的ファイルを利用したWebアプリケーションを作成してみましょう。静的ファイルはスクリプトのあるディレクトリのpublicというディレクトリに配置します。cssというディテクトリを作成して、その中にcommon.cssというファイルを配置します。 # ディレクトリ構成 app.cgi public/css/common.css 以下がCSSを読み込んだスクリプトです。見出しの部分が赤くなっているのが確認できると思います。 stylesheet関数を利用して、CSSを読み込んでいます。 #!/usr/bin/perl # Mojoliciousを読み込むためのライブラリのパスの設定 use FindBin; use lib "$FindBin::Bin/lib"; # Mojolicious::Liteの利用 use Mojolicious::Li

    MojoliciousでCSSなどの静的ファイルを利用する - Perl入門ゼミ
    kits
    kits 2011/03/30
    RewriteRule は /css 配下とか、もっと限定的でもよい気がします。( app.cgi/foo などを見るとデフォルトの404ページになりますが、画像が表示されません)
  • Windows上でMojoliciousの開発を始めて、さくらのレンタルサーバーで公開するまでの手順 - Perl入門ゼミ

    Perl › Mojolicious Windows上でMojoliciousというWebフレームワークを使ってWebアプリケーションの開発を行い、さくらのレンタルサーバーのライトプランで公開するまでの手順を書きたいと思います。ライトプランは1ヶ月あたり125円なので気軽にWebフレームワークを試してみることができます。現代的なWebフレームワークを使って、気軽にWebアプリケーションを作成できるのはPerlの良いところですね。 またSQLiteというデータベースも使ってみましょう。 環境構築 ActivePerlにはDBD::SQLiteDBIが含まれていますから、データベース関連のモジュールをインストールする必要はありません。またさくらのレンタルサーバーでもSQLiteが最初から利用できますので、こちらも何の準備もする必要はありません。 行うことはMojoliciousをダウンロード

    Windows上でMojoliciousの開発を始めて、さくらのレンタルサーバーで公開するまでの手順 - Perl入門ゼミ
    kits
    kits 2011/03/19
    %= stylesheet を入れる箇所がおかしい(head要素内に入れる必要あり)。(→削除済)
  • Digest::SHA - SHAによるダイジェスト値を求める - Perl入門ゼミ

    Perl › モジュール › here Digest::SHAモジュールを使用すると、各種SHAの値を求めることができます。SHA-1値を求めるには以下の関数を使います。 # モジュールの読み込みと関数のインポート use Digest::SHA 'sha1_hex'; sha1_hex関数を使用するとSHA-1の値を40桁の16進数の文字列として取得できます。 # SHA-1値を求める my $sha1_sum = sha1_hex 'alkeiop2lkj39'; 結果は次のような40桁の16進数になります。 # SHA-1値(16進数の文字列で取得) 20b07a8050be5dd980b1c17109fbbffaf3194498 Digest::SHAに関するFAQ Q. 簡単にいうとSHAとはなんでしょうか。 A. 「ある値」から「元の値を推測することがとても難しい値」を作り出す

    Digest::SHA - SHAによるダイジェスト値を求める - Perl入門ゼミ
    kits
    kits 2010/06/05
    日本語訳リンク先の Digest::SHA1 は別モジュールですよ。 (→訂正済)
  • Digest::MD5 - MD5を使ったダイジェスト値 - Perl入門ゼミ

    Perl › モジュール › here Digest::MD5モジュールを使用すると、MD5を使ったダイジェスト値を求めることができます。 # モジュールの読み込みと関数のインポート use Digest::MD5 'md5_hex'; md5_hex関数を使用するとMD5の値を32桁の16進数の文字列として取得できます。 # MD5値を求める my $md5_sum = md5_hex 'alkeiop2lkj39'; 結果は次のような32桁の16進数になります。 # MD5値(16進数の文字列で取得) fb4b7c4a986c550fce0a645ab425ea6d Digest::MD5に関するFAQ Q. 簡単にいうとMD5とはなんでしょうか。 A. 「ある値」から「元の値を推測することがとても難しい値」を作り出す関数のひとつです。ファイルが破損していないかをチェックしたり(ファイ

    Digest::MD5 - MD5を使ったダイジェスト値 - Perl入門ゼミ
    kits
    kits 2010/06/05
    MD5やSHA(ハッシュ関数)の値を「チェックサム」と呼ぶのには違和感あり。 http://ja.wikipedia.org/wiki/%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%82%B5%E3%83%A0 (→訂正済)