忍者ブログ

Wordpressメモとかアフィめもとか

Wordpress,PHP,アフィリエイトとかの個人メモを記録していくよ

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

perlライブラリ、モジュール

perlでライブラリを使う。
requireとかpmモジュールとかpackage,useとか?

  • 別ファイルを読み込む(require)

[main.pl]

#!/usr/bin/perl

use strict;
use warnings;

require 'func.pl';

print func(1,2);


[func.pl]

use strict;
use warnings;

sub func {
  my $a = $_[0];
  my $b = $_[1];
  return $a + $b;
}


[結果]

$ ./main.pl
3

  • package宣言Ver

[main.pl]

#!/usr/bin/perl

use strict;
use warnings;

require 'func.pl';

print Func::func(1,2);


[func.pl]

package Func;

use strict;
use warnings;

sub func {
  my $a = $_[0];
  my $b = $_[1];
  return $a + $b;
}
1;
 

package Func;で名前宣言し、呼び出すほうは完全修飾名「Func::func()」で呼ぶ。
最後の1はおまじない。(packageは真以外を返さないといけないので)
  • .pmモジュールをuseする。

[main.pl]

#!/usr/bin/perl

use strict;
use warnings;
use Func;

print func(1,2);


[Func.pm]

package Func;

use strict;
use warnings;

use Export;
our @ISA = qw(Exporter);
our @EXPORT = qw(func);


sub func {
  my $a = $_[0];
  my $b = $_[1];
  return $a + $b;
}
1;
 

モジュールはFunc.pm
main側のuseが勝手にFuncのfuncをimportしてくれるので、main.plでfunc()のみで呼び出せる。(完全修飾名の必要が無い)
useをする事は

BEGIN { 
  require Func;
  import Func;
}

がコンパイルの際に1度だけ実行される。
(requireは実行時に解釈)


拍手[0回]

PR

mysqlSelect結果をファイル出力

mysqlSelect結果をファイル出力するには以下の通り。

mysql> select * from hoge_table into outfile 'FILE_NAME';
FILE_NAMEで指定したファイルはサーバ上にできる。 クライアントに出力したい場合、コマンドラインから
mysqldump --tab や  mysql -h HOST -u USER DSN -pPASSWORD -e "SELECT ..." > outfile
MySQL :: MySQL 4.1 リファレンスマニュアル :: 6.4.1 SELECT 構文

拍手[0回]

mysql LOAD INFILE テキストファイルから一括読み込みとか

mysqlでLOAD INFILEを使ってCSV→DBにデータを格納すると、すごい勢いでbinlogが出力される。
binlogはoracleのアーカイブログみたいなものなので、空のテーブルにファイルをロードするときは一時的に着るほうが望ましい。
(クラッシュしても、ファイルは手元にあるはずだから)

ところが、レンタルサーバ(私はlolipop)では、mysqlにSUPER権限が無いのでそのセッションだけバイナリログを無効にする事ができない。

mysql> SET sql_log_bin=OFF;  

SUPER権限があるなら↑でとめられる。


そこでストレージエンジンを試してみようと思う。MySQLの醍醐味らしい。

mysql> CREATE TABLE テーブル名 (テーブル定義 INDEXは無し) ENGINE CSV;  

って考えていたら、DBサーバが別サーバにある場合どうしたらいいんだろう。。。
ちょっと考えなきゃ。。。


今回binlog大量生成で、一時的にアカウントをとめられてしまったけど、即座の対応と、検証用環境の提供などをしてくれて、驚いた。やるなロリポップ。

 

 


 

拍手[0回]

perlでDBIプログラムの例外処理

PerlでDB接続プログラムの基本部分

DB接続したらすぐeval

$dbh = DBI->connect($DSN, $USER, $PASS,
                   {RaiseError => 1, PrintError => 0, AutoCommit => 0 }) || die  "DB connect error :$!";

eval{
  処理;
  処理;
  処理;
  ...
  $dbh->commit;
  $dbh->disconnect;
};
if( $@ ){
  $dbh->rollback;
  $dbh->disconnect;
  print $@;
}

eval{};のなかの処理でエラーが起こればその瞬間dieしてeval{};を抜ける。
エラーはif( $@ )で引っかかるので、そこで例外処理をする。
tyy ~ catchみたいなもの?


 

拍手[0回]

Perl,DBI 結果を取得はfetchall_arrayref

PerlでDBIモジュールを利用し、DBからデータを取得するとき。

fetchall_arrayrefを使う。

$ref = $sth-> fetchall_arrayref;
foreach my $val ( @$ref ){
  print $val->[0];
}



拍手[1回]

ブログ内検索

最新コメント

広告

プロフィール

なんとなくはじめてみたよ

忍者ツールズプロフィールは終了しました

カウンター