22
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

perlのcallerが何かと便利、ログ取るときとか

Last updated at Posted at 2013-09-03

Perlでサービス開発しているのですが、今ログデータを取るプログラムをφ(`д´)カキカキしてます。
まあ、ログ取りはサービス展開している際には基本なので、むしろ何故に今頃やっとんねんって感じです( ´Д)σ)Д)プニョプニョ

さっき書いたものは、あるデータの送るときそれがどの関数からいつ来たのか任意の文字列なり関数名なりをDBに保存させるといったもの。

どちらもそんな大変なことではなかったのですが(コントローラーまるっと書き換えましたけどね....(#・∀・))そこで使ったものが caller という関数。
↓こんな感じで

my $oniku = $args{'syake'} || (caller 1)[3];

使い方

引数なし

リストで返されます。
0: 呼び出し元のパッケージ名
1: 呼び出し元のファイル名
2: 呼び出し元の行番号

($package, $file, $line) = caller; 

引数あり

リストで返されます。
0: 呼び出し元のパッケージ名
1: 呼び出し元のファイル名
2: 呼び出し元の行番号
3: 呼び出したサブルーチン名
4: 引数の有無(1: 引数あり、2: 引数なし)
5: リストの要望(1: リストコンテキストで呼び出された場合、2: スカラーコンテキストで呼び出された場合)

引数
1: 実行している関数名が対象
2: 呼び出し元の関数が対象

my$this_func_name = (caller0)[3];
$this_func_name =~ s/.*:://;

そうそう、このままでは完全修飾名が取得されるから、
↑みたいに正規表現で要らない部分を削除したら、関数名だけがとれます。

sub get_host_func_name {
  my $host_func_name = (caller1)[3];
  $host_func_name =~ s/.*:://;
}

↑みたいな関数をメソッドをBase.pmとかの汎用ライブラリに作っておいてもいいかもなぁって思ったりもします。

...ログデータはとっても大事_〆(・ω・` )カキカキ

22
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?