Archive for the ‘Perl’ Category

  1. Hello, Perl/Tk World!

    Posted on 5月 13th, 2013 by cx20

    Perl/Tk

    Perl/Tk は Tcl スクリプト用の GUI ツールキット「Tk」を Perl から呼出し可能にしたライブラリである。
    以下は Perl による Perl/Tk の呼出し例となっている。

    ソースコード

    use Tk;
     
    $window = MainWindow->new();
    $window->title( 'Hello, World!' );
    $window->geometry( '640x480' );
     
    $label = $window->Label( -text => "Hello, Perl/Tk World!" );
    $label->pack( -side => 'top', -anchor => 'w' );
     
    MainLoop();

    実行方法

    C:¥> pl hello.pl

    実行結果

    +------------------------------------------+
    |Hello, World!                    [_][~][X]|
    +------------------------------------------+
    |Hello, Perl/Tk World!                     |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  2. Hello, ODBC(Perl) World!

    Posted on 9月 20th, 2012 by cx20

    ODBC

    ODBC(Open Database Connectivity)は、マイクロソフト社が提唱した DBMS 接続用の API 仕様である。
    DBMS の差異は ODBC ドライバによって吸収される為、ODBC の手順にしたがってプログラムを作成すれば、基本的な差異を意識せず、プログラムすることができる。

    ODBCドライバ ファイル
    Microsoft Access Driver (*.mdb) ODBCJT32.DLL
    Microsoft Text Driver (*.txt; *.csv) ODBCJT32.DLL
    Microsoft Excel Driver (*.xls) ODBCJT32.DLL
    Microsoft dBase Driver (*.dbf) ODBCJT32.DLL
    Microsoft ODBC for Oracle MSORCL32.DLL
    Microsoft Paradox Driver (*.db ) ODBCJT32.DLL
    SQL Server SQLSRV32.DLL
    Microsoft Access Driver (*.mdb, *.accdb) ACEODBC.DLL
    SQL Server Native Client 10.0 SQLNCLI10.DLL

    ソースコード(Perl + ODBC + SQL Server)

    use strict;
    use Win32::ODBC;
     
    my $db = Win32::ODBC->new('Driver={SQL Server};Server=(local);UID=sa;PWD=P@ssW0rd');
    $db->Sql("SELECT 'Hello, ODBC World' AS Message");
     
    while ($db->FetchRow) {
        my %row = $db->DataHash;
        print "Message", "n";
        print "-------------------n";
        print $row{Message}, "n";
    }
    $db->Close();

    ソースコード(Perl + ODBC + MySQL)

    use strict;
    use Win32::ODBC;
     
    my $db = Win32::ODBC->new('Driver={MySQL ODBC 5.1 Driver};Server=localhost;UID=root;PWD=P@ssW0rd');
    $db->Sql("SELECT 'Hello, ODBC World' AS Message");
     
    while ($db->FetchRow) {
        my %row = $db->DataHash;
        print "Message", "n";
        print "-------------------n";
        print $row{Message}, "n";
    }
    $db->Close();

    実行方法(Windows)

    C:¥> perl hello.pl

    実行結果

    Message
    ------------------
    Hello, ODBC World!
  3. Hello, ADO(Perl) World!

    Posted on 9月 19th, 2012 by cx20

    ADO(Perl)

    ADO(ActiveX Data Objects)は、マイクロソフト社が開発した COM ベースの DBMS 接続用 API である。
    OLE DB プロバイダを介することで様々な DBMS への接続が可能となっている。
    OLE DB プロバイダとしては、以下のようなプロバイダがある。いくつかが OS 標準で付属している他、追加インストールが可能である。

    プロバイダ名 表示名 説明
    MSDASQL Microsoft OLE DB Provider for ODBC ODBC データベース
    Microsoft.Jet.OLEDB.4.0 Microsoft OLE DB Provider for Microsoft Jet Microsoft Jet データベース
    Microsoft.ACE.OLEDB.12.0 Microsoft Office 12.0 Access Database Engine OLE DB Provider Microsoft Access データベース
    SQLOLEDB Microsoft OLE DB Provider for SQL Server Microsoft SQL Server
    SQLNCLI10 SQL Server Native Client 10.0 Microsoft SQL Server
    MSDAORA Microsoft OLE DB Provider for Oracle Oracle データベース

    ソースコード(Perl + ADO + OLEDB + Jet データベース)

    use strict;
    use Win32::OLE;
     
    my $cn = Win32::OLE->new("ADODB.Connection");
    $cn->Open( "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=.\hello.mdb" );
    my $rs = $cn->Execute( "SELECT 'Hello, ADO World!' AS Message" );
     
    while ( !$rs->EOF ) {
        print $rs->Fields(0)->{Name}, "n";
        print "-------------------n";
        print $rs->Fields(0)->{Value}, "n";
       $rs->MoveNext();
    }
     
    $rs->Close();
    $cn->Close();

    ソースコード(Perl + ADO + OLEDB + ACE データベース)

    use strict;
    use Win32::OLE;
     
    my $cn = Win32::OLE->new("ADODB.Connection");
    $cn->Open( "PROVIDER=Microsoft.ACE.OLEDB.12.0;Data Source=.\hello.accdb" );
    my $rs = $cn->Execute( "SELECT 'Hello, ADO World!' AS Message" );
     
    while ( !$rs->EOF ) {
        print $rs->Fields(0)->{Name}, "n";
        print "-------------------n";
        print $rs->Fields(0)->{Value}, "n";
       $rs->MoveNext();
    }
     
    $rs->Close();
    $cn->Close();

    ソースコード(Perl + ADO + OLEDB + SQL Server)

    use strict;
    use Win32::OLE;
     
    my $cn = Win32::OLE->new("ADODB.Connection");
    $cn->Open( "PROVIDER=SQLOLEDB;SERVER=(local);DATABASE=master", "sa", "P@ssW0rd" );
    my $rs = $cn->Execute( "SELECT 'Hello, ADO World!' AS Message" );
     
    while ( !$rs->EOF ) {
        print $rs->Fields(0)->{Name}, "n";
        print "-------------------n";
        print $rs->Fields(0)->{Value}, "n";
       $rs->MoveNext();
    }
     
    $rs->Close();
    $cn->Close();

    ソースコード(Perl + ADO + OLEDB + Oracle)

    use strict;
    use Win32::OLE;
     
    my $cn = Win32::OLE->new("ADODB.Connection");
    $cn->Open( "PROVIDER=MSDAORA;Data Source=ORCL", "scott", "tiger" );
    my $rs = $cn->Execute( "SELECT 'Hello, ADO World!' AS Message FROM DUAL" );
     
    while ( !$rs->EOF ) {
        print $rs->Fields(0)->{Name}, "n";
        print "-------------------n";
        print $rs->Fields(0)->{Value}, "n";
       $rs->MoveNext();
    }
     
    $rs->Close();
    $cn->Close();

    実行方法(Windows)

    C:¥> perl hello.pl

    実行結果

    Message
    -----------------
    Hello, ADO World!
  4. Hello, DBI(Perl) World!

    Posted on 9月 18th, 2012 by cx20

    DBI

    DBI は Perl 向けの Database Interface(API)である。
    各データベースドライバを介することで、様々な DBMS への接続が可能となっている。

    ソースコード(Perl + DBI + ODBC + SQL Server)

    use strict;
    use DBI;
     
    my $dbh = DBI->connect('dbi:ODBC:Driver={SQL Server};Server=(local)', 'sa', 'P@ssW0rd');
    my $sth = $dbh->prepare("SELECT 'Hello, DBI World' AS Message");
    $sth->execute();
     
    while (my $row = $sth->fetchrow_array) {
        print "Message", "n";
        print "-------------------n";
        print $row, "n";
    }
    $sth->finish();
    $dbh->disconnect();

    ソースコード(Perl + DBI + MySQL)

    use strict;
    use DBI;
     
    my $dbh = DBI->connect('dbi:mysql:test', 'root', 'P@ssW0rd');
    my $sth = $dbh->prepare("SELECT 'Hello, DBI World' AS Message");
    $sth->execute();
     
    while (my $row = $sth->fetchrow_array) {
        print "Message", "n";
        print "-------------------n";
        print $row, "n";
    }
    $sth->finish();
    $dbh->disconnect();

    実行方法(Windows)

    C:¥> perl hello.pl

    実行結果

    Message
    -----------------
    Hello, DBI World!
  5. Hello, Win32 GUI(Perl) World!

    Posted on 7月 13th, 2012 by cx20

    Win32 GUI(Perl)

    Win32 アプリケーションは Windows 標準 API である Win32 API を使用した Windows アプリケーションである。
    以下は Perl にて Win32::GUI ライブラリを使用した Win32 GUI アプリケーション の例となっている。

    ソースコード

    use Win32::GUI();
     
    $main = Win32::GUI::Window->new( 
        -text => "Hello, world" );
     
    $label = $main->AddLabel( 
        -text => "Hello, Win32 GUI(Perl) World!" );
     
    $main->Resize(640, 480);
    $main->Show();
     
    Win32::GUI::Dialog();

    実行方法

    C:¥> perl hello.pl

    実行結果

    +------------------------------------------+
    |Hello, World!                    [_][~][X]|
    +------------------------------------------+
    |Hello, Win32 GUI(Perl) World!             |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  6. Hello, COM(Perl) World!

    Posted on 5月 23rd, 2012 by cx20

    Perl

    COM(Component Object Model)はマイクロソフトの提唱するプログラム部品の仕様である。
    COM を用いて開発された部品であれば言語を問わず利用することができる。
    以下は Perl による COM クライアントの例となっている。

    ソースコード

    use strict;
    use Win32::OLE;
     
    my $shell = Win32::OLE->new('Shell.Application');
    my $folder = $shell->BrowseForFolder( 0, 'Hello, COM(Perl) World!', 0, 36 );

    実行方法

    C:¥> perl hello.pl

    実行結果

    +----------------------------------------+
    |Browse For Folder                    [X]|
    +----------------------------------------+
    | Hello, COM(Perl) Wolrd!                |
    |                                        |
    | +------------------------------------+ |
    | |[Windows]                           | |
    | | +[addins]                          | |
    | | +[AppCompat]                       | |
    | | +[AppPatch]                        | |
    | | +[assembly]                        | |
    | |     :                              | |
    | |     :                              | |
    | |     :                              | |
    | +------------------------------------+ |
    | [Make New Folder]    [  OK  ] [Cancel] |
    +----------------------------------------+
  7. Hello, Win32 API(Perl) World!

    Posted on 4月 27th, 2012 by cx20

    Win32 API(Perl)

    Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。
    以下は Perl にて Win32::API モジュールを用いた呼出し例である。

    ソースコード

    use strict;
    use Win32::API;
     
    my $msgbox= Win32::API->new("user32", "MessageBoxA", "NPPN", "N");
       $msgbox->Call( 0, "Hello, Win32 API(Perl) World!", "Hello, World!", 0 );

    なお、上記の “NPPN”, “N” は各引数と戻り値の型を表している。以下は主要なタイプ一覧である。詳細は「Win32::API – search.cpan.org」を参照のこと。

    タイプ 説明
    I 整数型(int)
    N 数値型(long)
    F 単精度浮動小数点数(float)
    D 倍精度浮動小数点数(double)
    C 文字型(char)
    P ポインタ型(文字列、構造体等へのポインタ)
    S 構造体オブジェクト(Win32::API::Struct)
    K コールバックオブジェクト(Win32::API::Callback)

    コンパイル方法

    C:¥> perl hello.pl

    実行結果

    ---------------------------
    Hello, World!
    ---------------------------
    Hello, Win32 API(Perl) World!
    ---------------------------
    OK   
    ---------------------------
  8. Hello, Template Toolkit World!

    Posted on 2月 22nd, 2012 by cx20

    Template Toolkit

    Template Toolkit は Perl 用のテンプレートエンジンの一つである。TT または TT2 と呼ばれている。

    ソースコード(テンプレート)

    <html>
      <head>
         <title>Hello, World!</title>
      </head>
      <body>
        <p>Hello, [% message %] World!</p>
      </body>
    </html>

    ソースコード(CGIコード)

    #!/usr/bin/perl
    use Template;
     
    my $template = Template->new();
    my $message = 'Template';
    my $result;
    my $vars = { 'message' => $message };
    $template->process('template.tt', $vars, $result);
    print "Content-Type: text/htmlnn";
    print $result;

    実行方法

    1. CGI用フォルダ(cgi-bin等)に配置
    2. 実行権限の付与
       $ chmod +x hello.pl
    3. ブラウザで表示
       http://localhost/cgi-bin/hello.pl

    実行結果

    Hello, Template Toolkit World!
  9. Hello, HTML::Template World!

    Posted on 2月 21st, 2012 by cx20

    HTML::Template

    HTML::Template は Perl 用の HTML テンプレートモジュールである。

    ソースコード(テンプレート)

    <html>
      <head>
         <title>Hello, World!</title>
      </head>
      <body>
        <p>Hello, <TMPL_VAR NAME=MESSAGE> World!</p>
      </body>
    </html>

    ソースコード(CGIコード)

    #!/usr/bin/perl 
    use HTML::Template;
    my $template = HTML::Template->new(filename => 'hello.tmpl');
    $template->param(MESSAGE => "HTML::Template");
    print "Content-Type: text/htmlnn";
    print $template->output;

    実行方法

    1. CGI用フォルダ(cgi-bin等)に配置
    2. 実行権限の付与
       $ chmod +x hello.pl
    3. ブラウザで表示
       http://localhost/cgi-bin/hello.pl

    実行結果

    Hello, HTML::Template World!
  10. Hello, CGI World!

    Posted on 2月 7th, 2012 by cx20

    CGI

    CGI(Common Gateway Interface)は、Web サーバー上でプログラムを動作させる為の仕様の一つである。
    言語としては、C言語 や Perl が主に使われるが、他の言語でも HTTP ヘッダ “Content-Type: text/html¥n¥n” を出力することで、CGI プログラムとして動作させることが可能である。
    CGI 以外の実行方式としてはモジュール形式(Apache や IIS の拡張モジュールとして動作)や FastCGI 形式がある。

    ソースコード(C言語)

    #include <stdio.h>
     
    int main( int argc, char* argv[] )
    {
        printf( "Content-type: text/htmlnn" );
        printf( "<html>n" );
        printf( "  <head>n" );
        printf( "    <title>Hello, World</title>n" );
        printf( "  </head>n" );
        printf( "  <body>n" );
        printf( "    <p>Hello, CGI World!</p>n" );
        printf( "  </body>n" );
        printf( "</html>n" );
        return 0;
    }

    ソースコード(Perl)

    #!/usr/bin/perl
    print "Content-Type: text/htmlnn";
    print "<html>n";
    print "  <head>n";
    print "    <title>Hello, World!</title>n";
    print "  </head>n";
    print "  <body>n";
    print "    <p>Hello, CGI World!</p>n";
    print "  </body>n";
    print "</html>n";

    ソースコード(PHP)

    #!/usr/bin/php
    <html>
      <head>
        <title>Hello, World!</title>
      </head>
      <body>
        <p><?php echo "Hello, CGI World!"; ?></p>
      </body>
    </html>

    実行方法(C言語)

    1. コンパイル
       $ cc -o hello.cgi hello.c
    2. CGI用フォルダ(cgi-bin等)に配置
    3. 実行権限の付与
       $ chmod +x hello.cgi
    4. ブラウザで表示
       http://localhost/cgi-bin/hello.cgi

    実行方法(Perl)

    1. CGI用フォルダ(cgi-bin等)に配置
    2. 実行権限の付与
       $ chmod +x hello.pl
    3. ブラウザで表示
       http://localhost/cgi-bin/hello.pl

    実行方法(PHP)

    1. CGI用フォルダ(cgi-bin等)に配置
    2. 実行権限の付与
       $ chmod +x hello.php
    3. ブラウザで表示
       http://localhost/cgi-bin/hello.php

    実行結果

    Hello, CGI World!