warning: Creating default object from empty value in /var/www/drupal-5.23/modules/taxonomy/taxonomy.module on line 1418.

Perl での、配列とハッシュの組み合わせのデータ構造

  1. 配列の頭に付けるのは@であるから、その後の配列の要素の列挙においてハッシュを宣言する。このときハッシュの各要素は {...} でくくって 「key => value」 としている。それぞれの要素はカンマ(,) で区切る。配列の宣言の最後はセミコロン (;) である。
  2. 各要素へのアクセスはまず配列を foreach でほぐす。ほぐした各要素は $db->{key} のように -> でアクセスできる。
#!/usr/bin/perl

# 定義
@DBs =
(   # Iteration of the parameters
    {
        DB       => 'db1_name',      # Database Name
        USERNAME => 'db1_username',  # Username
        PASSWORD => 'db1_password',  # Password
    },
    {
        DB       => 'db2_name',      # Database Name
        USERNAME => 'db2_username',  # Username
        PASSWORD => 'db2_password',  # Password
    }
);

# アクセス
foreach my $db ( @DBs ) {

    print "DB name : $db->{DB}\n";
    print "Username: $db->{USERNAME}\n";
    print "Password: $db->{PASSWORD}\n";
    print "\n";
}
  1. 配列の頭に付けるのは@であるから、その後の配列の要素の列挙においてハッシュを宣言する。このときハッシュの各要素は {...} でくくって 「key => value」 としている。それぞれの要素はカンマ(,) で区切る。配列の宣言の最後はセミコロン (;) である。
  2. 各要素へのアクセスはまず配列を foreach でほぐす。ほぐした各要素は $db->{key} のように -> でアクセスできる。
#!/usr/bin/perl

# 定義
@DBs =
(   # Iteration of the parameters
    {
        DB       => 'db1_name',      # Database Name
        USERNAME => 'db1_username',  # Username
        PASSWORD => 'db1_password',  # Password
    },
    {
        DB       => 'db2_name',      # Database Name
        USERNAME => 'db2_username',  # Username
        PASSWORD => 'db2_password',  # Password
    }
);

# アクセス
foreach my $db ( @DBs ) {

    print "DB name : $db->{DB}\n";
    print "Username: $db->{USERNAME}\n";
    print "Password: $db->{PASSWORD}\n";
    print "\n";
}

Perl で、#!/usr/bin/perl -w とは?

起動時のオプション -w スイッチは、警告を出すようにする。なので、スクリプト開発フェーズではスクリプトの先頭に以下のように書くこと。
#!/usr/bin/perl -w

# Your own logic from here
起動時のオプション -w スイッチは、警告を出すようにする。なので、スクリプト開発フェーズではスクリプトの先頭に以下のように書くこと。
#!/usr/bin/perl -w

# Your own logic from here

Perl で、セッション管理をしたい。 (Apache::Session)

Apache::Session を使う。 パフォーマンスを少し測ってみたら CGI::Session よりも若干速いようである。 このモジュールは eval {...}; とセットで使うとよい。 - Perl で、例外処理をするような感じのもの。if($@) {...} のセットで使う。eval にはセミコロン(;) を忘れないこと。 例では、%session を $session としてハッシュで返している。 このモジールを使う利点は、ID の長さを自由に変えられることである。CGI::Session の場合は、ID の長さを変えたければ、自分で書かなければならない。一方で短所は、セッションの有効期限を設定できないこと。そのため、MySQL 中のsessions テーブルに timestamp フィールドを独自に追加して、自身の CGI の中か cron で適宜 reap する必要がある。また、セッションオブジェクト中の個別のデータにも有効期限を設けることはできない (CGI::Session はできる)。それでもこのモジュールが良いのは、パフォーマンスが CGI::Session よりも若干良いのと、ID の長さを変えられるからである。
use DBI;
use Apache::Session;
このモジュールは永続ストレージ (要はセッション情報をずっと溜めておけるデータベース) の種類によっていろいろな種類がある。
Apache::Session::MySQL
Apache::Session::Postgres
Apache::Session::File
Apache::Session::Oracle
Apache::Session::Sybase
Apache::Session::DB_File
Apache::Session::Flex 	実行時にすべてのパラメータを指定する
以下の例では Apache::Session::Flex を使っている。
use DBI;
use Apache::Session::Flex;

$session = _getSession;
print $session->{_sessin_id}

sub _getSession {

    my $db;
    my ($database, $username, $password);
    # 以上の変数には値を入れること。

    $db = DBI->connect("DBI:mysql:$databasename",
                                 $username,
                                 $password
                                 ) || die 'Cannot connect db';

eval {

    tie %session, 'Apache::Session::Flex', $sid, {

        Store      => 'MySQL',
        Lock       => 'MySQL',
        Generate   => 'MD5',
        IDLength   => 32,
        Serialize  => 'Storable',
        Handle     => $db,
        LockHandle => $db,
    };

};  # セミコロンを忘れないこと

if($@)    {    # $@: error message of eval

    return undef;
}

# セッション ID の取得に成功。ここに処理を書く。

    return \%session;

}
Apache::Session を使う。 パフォーマンスを少し測ってみたら CGI::Session よりも若干速いようである。 このモジュールは eval {...}; とセットで使うとよい。 - Perl で、例外処理をするような感じのもの。if($@) {...} のセットで使う。eval にはセミコロン(;) を忘れないこと。 例では、%session を $session としてハッシュで返している。 このモジールを使う利点は、ID の長さを自由に変えられることである。CGI::Session の場合は、ID の長さを変えたければ、自分で書かなければならない。一方で短所は、セッションの有効期限を設定できないこと。そのため、MySQL 中のsessions テーブルに timestamp フィールドを独自に追加して、自身の CGI の中か cron で適宜 reap する必要がある。また、セッションオブジェクト中の個別のデータにも有効期限を設けることはできない (CGI::Session はできる)。それでもこのモジュールが良いのは、パフォーマンスが CGI::Session よりも若干良いのと、ID の長さを変えられるからである。
use DBI;
use Apache::Session;
このモジュールは永続ストレージ (要はセッション情報をずっと溜めておけるデータベース) の種類によっていろいろな種類がある。
Apache::Session::MySQL
Apache::Session::Postgres
Apache::Session::File
Apache::Session::Oracle
Apache::Session::Sybase
Apache::Session::DB_File
Apache::Session::Flex 	実行時にすべてのパラメータを指定する
以下の例では Apache::Session::Flex を使っている。
use DBI;
use Apache::Session::Flex;

$session = _getSession;
print $session->{_sessin_id}

sub _getSession {

    my $db;
    my ($database, $username, $password);
    # 以上の変数には値を入れること。

    $db = DBI->connect("DBI:mysql:$databasename",
                                 $username,
                                 $password
                                 ) || die 'Cannot connect db';

eval {

    tie %session, 'Apache::Session::Flex', $sid, {

        Store      => 'MySQL',
        Lock       => 'MySQL',
        Generate   => 'MD5',
        IDLength   => 32,
        Serialize  => 'Storable',
        Handle     => $db,
        LockHandle => $db,
    };

};  # セミコロンを忘れないこと

if($@)    {    # $@: error message of eval

    return undef;
}

# セッション ID の取得に成功。ここに処理を書く。

    return \%session;

}