• ベストアンサー

Perlで定義済みの関数名を使った場合の警告について

新しいパッケージで、同じ名前の関数名を定義した場合 Subroutine tmpnam redefined at というメッセージが 表示されますが、もともと同名の関数名は定義してはいけないのでしょうか?できる(オブジェクト指向の考え)のでしたら、どのようにすれば、警告なしのスマートな記述になるのでしょうか? package NewPack; use POSIX; sub tmpnam{ my $fname = "new-file" . POSIX::tmpnam; return $fname; }

質問者が選んだベストアンサー

  • ベストアンサー
  • pica_zip
  • ベストアンサー率67% (19/28)
回答No.1

#!/usr/bin/perl -w { package NewPack; use strict; # use POSIX; use base qw( POSIX ); # POSIX を継承 sub new { return ( bless {} ); } sub tmpnam {  my $self = shift;  my $fname = "new-file" . POSIX::tmpnam();  return $fname; } sub DESTROY {} } package main; print NewPack->new()->tmpnam(); # 又は print NewPack::tmpnam(); exit; __END__ スマートかどうかは判りませんが、 とりあえずこんな感じで、POSIX を継承すると動くようです。   

関連するQ&A