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

Perl で、直近の INSERT で生成された ID を得るには?

MySQL を使っていて、auto_increment だったカラムがあるテーブルに INSERT をした場合、このときに生成された ID を取得するには、LAST_INSERT_ID() と書いた SELECT 文を発行する。
@result = $DB->selectrow_array(qq|SELECT LAST_INSERT_ID()|);
$id = $result[0];
MySQL を使っていて、auto_increment だったカラムがあるテーブルに INSERT をした場合、このときに生成された ID を取得するには、LAST_INSERT_ID() と書いた SELECT 文を発行する。
@result = $DB->selectrow_array(qq|SELECT LAST_INSERT_ID()|);
$id = $result[0];

Perl で、配列中の重複レコードを削除するには?

配列の中にある重複するレコードを削除する場合、Perl なのでいろいろな方法があると思うが、以下のコードを試してみて欲しい。
#/usr/bin/perl -w

my @array = ('a', 'b', 'c', 'a');

my %count;
@array = grep {!$count{$_}++} @array;

print @array; # 出力は abc となる。

1;
配列の中にある重複するレコードを削除する場合、Perl なのでいろいろな方法があると思うが、以下のコードを試してみて欲しい。
#/usr/bin/perl -w

my @array = ('a', 'b', 'c', 'a');

my %count;
@array = grep {!$count{$_}++} @array;

print @array; # 出力は abc となる。

1;

Perl で、ファイルを読み込んで処理する方法

Perl で、改行で区切られたファイルを読み込んで、1行ずつ処理するには、while() {...} のように書けばよい。
#!/usr/bin/perl

# 読み込むファイル名をここに書く
our $INPUT_FILE = 'yourfile.txt';

# ファイルをオープンする
open(IN, $INPUT_FILE) || die("Can't open a file: $!");

# 上の open で与えられた IN で、<IN> というように書き、while 文中で処理できる
while(<IN>) {

    # 1行ずつ表示する
    print $_; # 現在処理中の 1行は $_ で表わす。
}

# ファイルをクローズする
close(IN);
また、 の内容を 1行ずつ細かく処理するには、@IN = ; とするやり方も使える。以下はイテレータのループを while ではなく foreach で処理する例。
#!/usr/bin/perl

# 読み込むファイル名をここに書く
our $INPU_FILE = 'yourfile.txt';

# ファイルをオープンする
open(IN, $INPUT_FILE) || die("Can't open a file: $!");

# 上の open で与えられた IN で、<IN> というように書き、while 文中で処理する
@IN = <IN>;

# $INPUT_FILE の内容は @IN に入ったので、ここでファイルをクローズできる
close(IN);

foreach my $line (@IN) {

    # 1行ずつ表示する
    print $line; # 現在処理中の 1行は $line で表わす。
}
Perl で、改行で区切られたファイルを読み込んで、1行ずつ処理するには、while() {...} のように書けばよい。
#!/usr/bin/perl

# 読み込むファイル名をここに書く
our $INPUT_FILE = 'yourfile.txt';

# ファイルをオープンする
open(IN, $INPUT_FILE) || die("Can't open a file: $!");

# 上の open で与えられた IN で、<IN> というように書き、while 文中で処理できる
while(<IN>) {

    # 1行ずつ表示する
    print $_; # 現在処理中の 1行は $_ で表わす。
}

# ファイルをクローズする
close(IN);
また、 の内容を 1行ずつ細かく処理するには、@IN = ; とするやり方も使える。以下はイテレータのループを while ではなく foreach で処理する例。
#!/usr/bin/perl

# 読み込むファイル名をここに書く
our $INPU_FILE = 'yourfile.txt';

# ファイルをオープンする
open(IN, $INPUT_FILE) || die("Can't open a file: $!");

# 上の open で与えられた IN で、<IN> というように書き、while 文中で処理する
@IN = <IN>;

# $INPUT_FILE の内容は @IN に入ったので、ここでファイルをクローズできる
close(IN);

foreach my $line (@IN) {

    # 1行ずつ表示する
    print $line; # 現在処理中の 1行は $line で表わす。
}

Perl で、ファイルの最後にある 1; とは?

モジュールやパッケージをファイルに切り出した場合は、これらの実行の準備が済んだことを Perl インタプリタに知らせるために、パッケージの最後で真を返す必要がある。本来なら return 1; と書くべきなのだが、そこは Perl、多くのモジュールの省略して 1; だけ書かれている。ファイル最後の
1;
return 1;
なのである。
package pkg1;

sub foo {

    print "passed\n";
}

<font color="red"><strong>1;</strong></font> # ここは return 1; と同じ意味
モジュールやパッケージをファイルに切り出した場合は、これらの実行の準備が済んだことを Perl インタプリタに知らせるために、パッケージの最後で真を返す必要がある。本来なら return 1; と書くべきなのだが、そこは Perl、多くのモジュールの省略して 1; だけ書かれている。ファイル最後の
1;
return 1;
なのである。
package pkg1;

sub foo {

    print "passed\n";
}

<font color="red"><strong>1;</strong></font> # ここは return 1; と同じ意味
Posted on 2006-03-05 by yas |