Perl再入門の最近のブログ記事

[Perl]DBIの使い方入門   はてなブックマークに登録  

PerlでDBIモジュールを使ってDB操作を行うためのかんたんなサンプルコードです。

「都道府県マスタ」テーブルを作って、CRUD(レコード追加、読み取り、変更、削除)を行います。

注:
  • コマンドラインから実行することを想定しています。
  • ユーザ名、パスワード、DB接続情報などは環境に合わせて変更してくださいね。
  • サンプルではMySQLを使用していますが、他のRDBMSにも使えると思います。

 #!/usr/bin/perl
 
 use strict;
 use warnings;
 use DBI;
 
 my $user = 'username';
 my $passwd = 'pass';
 my $host = 'localhost';
 my $dbname = 'mysample';
 my $dbh = DBI->connect("DBI:mysql:$dbname:".$host, $user, $passwd);
 
 my $sql;
 my $sth;
 
 # CREATE TABLE
 $sql = "CREATE TABLE prefmaster ( id INT , name VARCHAR(255) ) ";
 $dbh->do($sql);
 
 # INSERT
 $sql = " INSERT INTO prefmaster (id,name) values (1, 'hokkaido') ";
 $dbh->do($sql);
 $sql = " INSERT INTO prefmaster (id,name) values (2, 'akita') ";
 $dbh->do($sql);
 
 # SELECT
 $sql = "SELECT * FROM prefmaster";
 
 $sth = $dbh->prepare($sql);
 $sth->execute;
 
 print "SELECT\n";
 while(my @a = $sth->fetchrow_array){
     print "@a\n";
 }
 print "\n";
 
 # UPDATE
 $sql = " UPDATE prefmaster SET name = 'iwate' WHERE id = 2 ";
 $dbh->do($sql);
 
 # DELETE
 $sql = " DELETE FROM prefmaster WHERE id = 1 ";
 $dbh->do($sql);
 
 # SELECT AGAIN
 $sql = "SELECT * FROM prefmaster";
 
 $sth = $dbh->prepare($sql);
 $sth->execute;
 
 print "SELECT\n";
 while(my @a = $sth->fetchrow_array){
     print "@a\n";
 }
 print "\n";
 
 
 # DROP TABLE
 $sql = " DROP TABLE prefmaster ";
 $dbh->do($sql);
 
 
 $sth->finish;
 $dbh->disconnect;
   | コメント(0) | トラックバック(0)

ソースコードをUTF8で書いて、print文をUTF8で出力したい場合。

自分でもよく忘れるのでメモ。

#!/usr/bin/perl

use strict;
use warnings;
use utf8; # このスクリプトはUTF8で書かかれていますよ、という宣言

binmode STDOUT, ":encoding(utf8)";  # 以下のPrint文を自動的にUTF8として出力せよ、という命令

my $str ="あいうえお\n";
print substr($str,2,1)."\n;"    # 'う'  と出力される。

   | コメント(0) | トラックバック(0)

Perlでは、サブルーチンへのリファレンスを作って変数に格納することができます。

use strict;

sub greets {
print "hello\n";
}
my $ref = \&greets;

この例では、greetsサブルーチンへのリファレンスを、$refに格納しています。


デリファレンス

$refをデリファレンスして元のサブルーチンを呼び出す方法

まずおさらい。

普通のサブルーチン呼出はこう書きます。
 &greets();  # → hello 

ここで、
サブルーチン名 → {$ref}
と置き換えると、
$refをデリファレンスして元のサブルーチンを得ることができます。

&{ $ref }();  # → hello 

デリファレンスの省略記法

下記のコードはすべて同じ動作をします。

&{$ref}();
&$ref();
$ref->();

無名配列コンストラクタ [ ] を使って、ネストされたリファレンスを作ることができます。

例1
my $ref = [ [ 1, 2, 3 ] , [ 2, 4, 6 ] ] ;

これは、次のコードと同じような働きをします。
例2
my @array1 = ( 1, 2, 3 );
my @array2 = ( 2, 4, 6 );
my @array_all = ( \@array1, \@array2 );
my $ref = \@array_all;


デリファレンス
値を取り出すときはデリファレンスします。
print $ref->[1]->[1];   #  出力 4
または
print $ref->[1][1]; # 出力 4


2次元配列

上の例を見ると、2次元配列によく似ていることがわかると思います。
Perlではこのようにして2次元配列を実現します。

もちろん、ネストを重ねれば多次元配列を作れます。

例1
my $ref = [ 2, 4, 6 ]; 
これは、下記と同じような働きをします。

例2
my @array = ( 2, 4, 6 );

my $ref = \@array;


例2での@arrayに相当する中間変数が、例1にはありません。

このとき例1の$refには、「名前の無い配列」へのリファレンスが格納されています。

[ 2, 4, 6 ]における [ ]のことを
無名配列コンストラクタ
といいます。


参考: Perl再入門 | アルパカ本に学ぶリファレンス入門4 - 無名配列

このアーカイブについて

このページには、過去に書かれたブログ記事のうちPerl再入門カテゴリに属しているものが含まれています。

前のカテゴリはPerlです。

次のカテゴリはPHPです。