餃子を食べるとき、何をつけますか?

新しいパッケージで、同じ名前の関数名を定義した場合
Subroutine tmpnam redefined at というメッセージが
表示されますが、もともと同名の関数名は定義してはいけないのでしょうか?できる(オブジェクト指向の考え)のでしたら、どのようにすれば、警告なしのスマートな記述になるのでしょうか?

package NewPack;

use POSIX;

sub tmpnam{
my $fname = "new-file" . POSIX::tmpnam;
return $fname;
}

A 回答 (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 を継承すると動くようです。

  
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報