タグ

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

  • 数値と誤差 - Perl入門ゼミ

    Perl › 数値 › 誤差 小数をコンピュータで表現するには誤差が問題になります。2進数で表現できない小数は誤差が発生します。 コンピュータは数値を内部的には2進数としてしか表現できません。整数についてはどんな数でも2進数として表現できます。 問題になるのは小数です。2進数で表現できる少数は、0.5, 0.25, 0.125, 0.0625 ( 順に、1/2, 1/4, 1/8, 1/16 ) などの1/2のn乗で表現される数と、これらの和で表現される数( たとえば 0.75 )だけです。 0.3 というのはいくら2を乗算しても整数になりませんから、2進数で正確に表現することができません。コンピュータはこのような数を近似することによって何とか扱います。0.3は、2進数を使って以下のように近似されます。 0.3  = 1/4 + 1/32 + 1/64 + 1/512 = 0.25 + 0

    数値と誤差 - Perl入門ゼミ
  • Perlのコンテキストを理解しよう - Perl入門ゼミ

    Perl › 構文 › here Perlにはコンテキストと呼ばれる概念があります。コンテキストとは文脈という意味で、次の二つのコンテキストがあります。 スカラコンテキスト リストコンテキスト スカラとして評価される文脈をスカラコンテキスト、リストとして評価される文脈をリストコンテキストと呼びます。 一例としてあげれば、localtime関数は、スカラコンテキストでは、日付・時刻を表示する文字列を返却し、リストコンテキストでは、日付・時刻情報をリストにして返します。 # スカラコンテキスト $date_string = localtime; # リストコンテキスト @date_info = localtime; もうひとつの一例をあげると、配列は、スカラコンテキストでは、配列の個数を、リストコンテキストでは、要素のリストを返します。 # スカラコンテキスト $count = @values

    Perlのコンテキストを理解しよう - Perl入門ゼミ
  • Perlのファイル入出力の基礎 - Perl入門ゼミ

    Perl › here Perlのファイル入出力の基礎をマスターしましょう。 テキストファイルの読み込みと書き込みができるようになることを目標にします。 ファイルオープン ファイルを読み込むためには最初にファイルをオープンする必要があります。ファイルはOSによって管理されているので、最初にプログラムでファイルを扱いたいということをOSに伝える必要があります。OSは対象のファイルの識別子をプログラムに返却します。 ファイルをオープンするにはopen関数:title=open関数]を使用します。 my $file = 'data.txt'; open my $fh, '<', $file or die qq/Can't open file "$file" : $!/; ファイルのオープンの処理についてひとつづつ解説します。 open関数 open関数は3つの引数を受け取ります。第一引数にはレキ

    Perlのファイル入出力の基礎 - Perl入門ゼミ
  • さくらのレンタルサーバーライトプランでCPANモジュールをインストールするためのスクリプト - Perl入門ゼミ

    Perl › Mojolicious さくらのレンタルサーバーライトプラン(月額125円)でCPANモジュールをインストールするためのWebアプリケーション(CGIスクリプト)を書きました。さくらのレンタルサーバーライトプランでは、SSHやTelnetを使えないために、CPANモジュールのインストールは障壁の高いものになってはいますが、このツールを使うとあら簡単に、Webブラウザ上からモジュールをインストールすることができます。 Windows上でMojoliciousの開発を始めて、さくらのレンタルサーバーで公開するまでの手順と同じ手順でさくらのレンタルサーバー上にFTPでアップロードしてください。app.cgiのパーミッションは755にする必要があります。 ディレクトリ構成は以下のようにします。 sakuracpanm - app.cgi モジュールのインストールはテキストボックスにモ

    さくらのレンタルサーバーライトプランでCPANモジュールをインストールするためのスクリプト - Perl入門ゼミ
  • Mojolicious(PSGI)アプリをStarmanでデプロイする - Perl入門ゼミ

    Perl › Mojolicious StarmanというPerlのプリフォークサーバを使って、Mojoliciousアプリケーションを起動してみます。Starman番環境でMojoliciousアプリケーションを運用するのに良い選択肢です。 cpanm Starman 以下はMojolicious::Liteで記述したPSGIアプリ(hello.pl)です。注意点として「app->start」と「__DATA__」の間にはコメント以外は置いてはいけません。 use strict; use warnings; use Mojolicious::Lite; get '/' => 'index'; app->start; __DATA__ @@ index.html.ep <html><body>Hello!</body></html> starmanを起動します。 starman hell

    Mojolicious(PSGI)アプリをStarmanでデプロイする - Perl入門ゼミ
  • Perlの正規表現をマスターしよう - Perl入門ゼミ

    Perl › 正規表現 Perlの正規表現の解説です。この記事を読めば、日常で利用する正規表現のすべてを短時間でマスターすることができます。正規表現を使えば、文字列の集合を表現することができ、正規表現にマッチする文字列を検索したり、置換したりすることができます。 正規表現を使って文字列の集合を表現できます。たとえば「a」「aa」「aaa」という三つの文字列を正規表現で表現してみましょう。連続する文字の個数を表現する正規表現「{}」を使って次のように書くことができます。 a{1,3} 「a」「aa」「aaa」という文字列の集合をひとつの正規表現「a{1,3}」で表しています。{}は量指定子と呼ばれるもので、連続した文字を表現することができます。 a aa -> a{1,3} aaa 正規表現の例をもう一つみてみましょう。「p1」「q1」「r1」という文字列の集合をひとつの正規表現「[pqr]

    Perlの正規表現をマスターしよう - Perl入門ゼミ
  • Perl XSにおけるデータ操作のためのAPI - サンプルコードPerl入門

    Perl › XS › here perlapiとはXSでPerlのデータを操作するための公式APIで、C言語で書かれたマクロや関数のことです。 出力、スカラ、標準入出力 PerlとXS(C言語)のAPIの対応がわかるとXSがわかりやすそうだ。 標準出力への出力 #Perl print "Hello"; # XS PerlIO_printf(PerlIO_stdout(), "Hello"); PerlIO_printfはC標準ライブラリのprintfにあたる関数。第一引数はPerlIO*型の変数、第二引数はchar*型の変数。標準出力はPerlIO_stdout関数で取得できる。XSでは標準入出力Cの標準ライブラリは使わずに、Perlで用意されている関数を使う。これはperlapioというドキュメントに詳しく乗せられている。 文字列 #Perl my $str = "Hello"; #

    Perl XSにおけるデータ操作のためのAPI - サンプルコードPerl入門
  • Perl XS入門 - XSの基礎を学ぼう - サンプルコードPerl入門

    Perl › here XSを使ったC/C++のバインディングについて解説します。まず最初に、XSモジュールを作成する方法について解説します。 1. XSモジュールの作成 では実際にXSモジュールを作成してみましょう。XSモジュール作成コマンド、Makefile.PL、makeについて丁寧に解説しています。 XSモジュールを作成する 2. perlapi XSからPerlのデータを操作する方法にについて解説します。PerlはC言語で実装されていますが、Perlの機能をC言語から呼び出すためのAPIがたくさん用意されています。 perlapi - XSにおけるデータ操作のためのAPI 3. Makefile.PL関連 Makefileを生成するために、Perlでは、Makefile.PLというファイルを作って、ExtUtil::MakeMakerというモジュールを使用します。このExtUti

    Perl XS入門 - XSの基礎を学ぼう - サンプルコードPerl入門
  • 公式ドキュメント一覧(日本語訳つき) - Perl入門ゼミ

    Perl › 公式ドキュメント Perlの公式ドキュメントの一覧です。日語訳が存在するものはリンクしています。 概観 初心者のためのPerlの入門 (perlintro) 入門 Perlリファレンスの短い入門 (perlreftut) Perlデータ構造入門 (perldsc) Perlデータ構造: 配列の配列 (perllol) Perl正規表現クイックスタート (perlrequick) Perl正規表現入門 (perlretut) 初心者のためのPerlオブジェクト指向入門 (perlboot) Perlオブジェクト指向入門 その1 (perltoot) Perlオブジェクト指向入門 その2 (perltooc) Perlオブジェクト指向 秘訣とサンプル (perlbot) Perlパフォーマンスと最適化のテクニック (perlperf) Perlスタイルガイド (perlstyl

    公式ドキュメント一覧(日本語訳つき) - Perl入門ゼミ
  • 豆知識 - 知っておくと役に立つ - Perl入門ゼミ

    Perl › 豆知識 知っておくと何かとPerlが使いやすくなったり、読みやすくなるかもしれないことをいろいろと追加していきます。 BEGIN BEGINはコンパイルのときに実行するということをあらわします。 BEGIN { # コンパイルのときに実行したい文 } require requireはuseと似ていますが実行時にモジュールを読み込むことと、importメソッドを自動的に実行しないところがことなります。 use File::Basename 'basename'; # 上と同じ意味 BEGIN { require File::Basename; File::Basename->import('basename'); } 動的にモジュールを読み込みたい場合はrequireを使用することがありますが、一般的な用途ではuseで統一するのがわかりやすいでしょう。 local localは

    豆知識 - 知っておくと役に立つ - Perl入門ゼミ
  • Storable - データをシリアライズ化する - Perl入門ゼミ

    Perl › モジュール › here Storableモジュールを使用すると、データをシリアライズ化することができます。シリアライズ化というのはPerlのデータ構造を外部に保存できる形式に変換することをいいます。 # モジュールの読み込みと関数のインポート use Storable qw/freeze thaw/; データをシリアライズ化するにはfreeze関数を使用します。 # データをシリアライズ化する my $data = [ {name => 'Ken', age => 19}, {name => 'Taro', age => 20} ]; my $serialized_data = freeze $data; シリアライズ化されたデータを元に戻すにはthaw関数を使用します。 # シリアライズ化されたデータを復元する my $data = thaw $serialized_da

    Storable - データをシリアライズ化する - Perl入門ゼミ
  • Benchmark - ベンチマーク(性能比較)を行う - Perl入門ゼミ

    Perl › モジュール › here Benchmarkモジュールを使用すると、ベンチマーク(性能比較)を行うことができます。 # モジュールの読み込みと関数のインポート use Benchmark qw/timethese cmpthese/; timethese関数を実行すると各関数の性能情報を取得できます。これをcompthese関数の引数に指定すると、標準出力に比較結果が表示されます。 # 性能の比較 my $result = timethese($count, { name1 => sub { # 実行したい処理1 }, name2 => sub { # 実行したい処理2 }, name3 => sub { # 実行したい処理3 }, }); cmpthese $result; ベンチマークを行うサンプルです。精度を上げるために実行回数をある程度増やす必要があります。このサンプ

    Benchmark - ベンチマーク(性能比較)を行う - Perl入門ゼミ
  • リアルタイム時計 / Mojoliciousサンプル - Perl入門ゼミ

    Perl › Mojolicious Mojolicious::Liteで作ったリアルタイム時計です。WebSocketを利用しています。ネイティブでWebSocketをサポートしているChromeで実行することができます。 リアルタイム時計 リアルタイム時計です。 ソースコード リアルタイム時計のソースコードです。 use Mojolicious::Lite; use Mojo::IOLoop; my $clients = {}; my $loop = Mojo::IOLoop->singleton; websocket '/' => sub { my $self = shift; # Client id my $cid = "$self"; # Controller my $controller = $self; # Send date and time my $datetime =

    リアルタイム時計 / Mojoliciousサンプル - Perl入門ゼミ
  • eval - 例外のキャッチ、文字列の動的実行 - Perl入門ゼミ

    Perl › 関数 › here eval関数を使用すると、ブロック構文の場合は、例外をキャッチすることができます。文字列構文の場合は、文字列を動的に実行することができます。 # evalブロック - 例外のキャッチ eval { ... }; # eval文字列 - 文字列を動的に実行 eval $string; ブロックの構文と、文字列の構文は、機能がまったく異なるので注意してください。それぞれの構文について詳しく解説します。 例外のキャッチ - evalブロック evalブロックと呼ばれている方は、Perlにおける例外のキャッチの構文です。 # evalブロック - 例外のキャッチ eval { ... }; これは、Javaなどにおける例外処理のcatch構文と同じ役割を果たします。evalブロックの中で、例外が発生した場合に、例外をキャッチし、プログラムが終了するのを防ぐことがで

    eval - 例外のキャッチ、文字列の動的実行 - Perl入門ゼミ
    hisaichi5518
    hisaichi5518 2010/04/02
    $module->require;
  • Perlデバッガの手引き - Perl入門ゼミ

    Perl › デバッガ Perlのとても便利な道具のひとつにデバッガがあります。デバッガを使うとスクリプトを一行づつたどって変数の中身を見たり、ブレークポイントを設定してその位置で停止したりすることができます。 デバッガは当に便利なのですがPerlをやっていても意外と知らない人がいます。ひとたびデバッガを覚えてしまうと試験をするときに手放せなくります。Perlを覚えたての時期からどんどん使っていって欲しいツールです。そんなデバッガのコマンドとテクニックをまとめてみました。 デバッグ用のスクリプト デバッグ用の簡単なスクリプトを準備しました。debug.plという名前で保存してください。このスクリプトを使用してデバッガの解説をします。 my $message = 'Hello'; my @nums = (1, 2, 3); my %scores = (math => 80, english

    Perlデバッガの手引き - Perl入門ゼミ
  • Mojoliciousのユーティリティ - Perl入門ゼミ

    Perl › Mojolicious Mojoliciousのユーティリティを紹介します。 継承を行う 継承を行う場合はbaseモジュールで行うことができますが、少し機能を拡張した継承の方法がMojoliciousには用意されています。機能を拡張した継承を行うには、Mojo::Baseのインポート機能を利用します。 package MyApp::Photoshoot; use Mojo::Base 'Mojolicious::Controller'; 上記の記述はMojolicious::Controllerクラスを継承して、MyApp::Photoshootクラスを作成している例です。 Mojo::Baseの継承機能は以下のような追加の機能を提供します。 「use strict」を自動で行う 「use warnings」を自動で行う 属性を定義するhasメソッドがインポートされる アクセ

    Mojoliciousのユーティリティ - Perl入門ゼミ
  • Webアプリケーションの雛形の作成 - Perl入門ゼミ

    Perl › Mojolicious Mojoliciousでは最低限必要な雛形を自動的に生成してくれます。雛形の作成方法と作成されたWebアプリケーションの雛形について解説を行います。 Webアプリケーションの雛形の作成 Webアプリケーションの雛形を作成するにはmojo直下のディレクトリに移動して次のコマンドを実行します。アプケーション名は先頭が大文字でその後の文字は小文字にしておくのが良い習慣であると思われます。(「TestApp」のような名前はあまりよくなく、「Testapp」のような名前がよいと思います。) # Windowsの場合 perl script\mojo generate app Webアプリケーション名 # Unix系OSの場合 perl script/mojo generate app Webアプリケーション名 ではSampleappという名前のWebアプリケーシ

    Webアプリケーションの雛形の作成 - Perl入門ゼミ
  • 現代的なPerlの記述方法一覧 - Perl入門ゼミ

    Perl › here Perl5.8以降における標準的なPerlの書き方を解説します。 インターネットで検索するとPerl4のころの古い記述がたくさんあります。また書籍などの多くもPerl4の記法で書かれています。Perl4の記法は複雑になりやすく間違いを生みやすいのでこれからPerlを書く人はPerl5の現代的な記法で記述することを強くお勧めします。 strictプラグマとwarningsプラグマ (必須) strictプラグマとwarningsプラグマを有効にします。 use strict; use warnings; use strict;とuse warnings;の2行はスクリプトの最初に必ず記述してください。これらはPerlの文法チェックを厳しくするためのものです。面倒だという軽い気持ちでこれを記述しないと後々当に面倒なことになります。 use strict;とuse wa

    現代的なPerlの記述方法一覧 - Perl入門ゼミ
    hisaichi5518
    hisaichi5518 2009/11/02
    use utf8;も強く推奨
  • Encode 日本語などのマルチバイト文字列を適切に処理する - Perl入門〜サンプルコードによるPerl入門〜

    Perl › モジュール › here 日語などのマルチバイト文字をPerlで適切に扱うにはEncodeモジュールを使用します。次の3つのことを覚えておけば多くの場合適切に日語を扱うことができます。 外部から入力された文字列はEncodeモジュールのdecode関数でデコードする 外部へ出力する文字列はEncodeモジュールのencode関数でエンコードする ソースコードはUTF-8で保存しutf8プラグマを有効にする この解説での用語 この解説では外部から入力された文字列のことを「バイト文字列」と呼ぶことにします。Perlの内部表現に変換された文字列を「内部文字列」と呼ぶことにします。また「バイト文字列」が特定の文字コードで記述されている場合は「UTF-8バイト文字列」「Shift_JISバイト文字列」などと呼ぶことにします。 プログラミングで日語を扱う場合にその文字列がバイト文字

    Encode 日本語などのマルチバイト文字列を適切に処理する - Perl入門〜サンプルコードによるPerl入門〜
  • 1