Perl 不同的新条件

Perl 不同的新条件,perl,Perl,我有以下Perl代码: my $C; if($someCondition) { my $A = My::Package::A::V1->new(); my $B = My::Package::B::V1->new(); $C = My::Package::C::V1->new(); } else { my $A = My::Package::A::V2->new(); my $B = My::Package::B::V2->

我有以下Perl代码:

my $C;

if($someCondition) {
    my $A = My::Package::A::V1->new();
    my $B = My::Package::B::V1->new();
    $C = My::Package::C::V1->new();
} else {
    my $A = My::Package::A::V2->new();
    my $B = My::Package::B::V2->new();
    $C = My::Package::C::V2->new();
}
# Have fun with $C
考虑到唯一的区别是基于
$someCondition
V1
V2
,我觉得这是多余的。有没有什么方法可以像
my$A=my::Package::A::V{$someCondition?1:2}->new()这样做


如果我还:

my $C;
if($someCondition) {
    my $C = Some::Package::Z->new(
      myPackageA => &My::Package::A::V1
    );
} else {
    my $C = Some::Package::Z->new(
      myPackageA => &My::Package::A::V2
    );
}
对于这一次,我尝试:

my $api_version;
if($someCondition) {
    $api_version = 'V1';
} else {
    $api_version = 'V2';
}
my $C = Some::Package::Z->new(
    myPackageA => "&My::Package::A::$api_version"
);

但是我得到了一个错误:
无法对未定义的值调用methodnew

您可以将类存储在字符串中,并使用它引用包:

my $api_version;
if($someCondition) {
    $api_version = 'V1';
} else {
    $api_version = 'V2';
}
die "No API version found" unless $api_version;

my $A = "My::Package::A::$api_version"->new();
my $B = "My::Package::B::$api_version"->new();
my $C = "My::Package::C::$api_version"->new();

# Have fun with $C
如果您还想调用名称空间中的函数(正如您在扩展问题中所做的那样),简单的方法是关闭
strict
,只需使用函数名称调用函数:

my $make_A;
{
    no strict 'refs';
    $make_A = \&{ "My::Package::A::$api_version" };
}
my $C = Some::Package::Z->new(
  myPackageA => $make_A->(),
);

谢谢,好主意!你能看一下最新的问题吗?我不明白你想在那里做什么。字符串
&My::Package::A::V1
应该是什么?
Some::Package::Z
My::Package::Z
有何不同?不需要关闭strict的函数的另一个选项是:
My$subref=“My::Package::A”->can($api\u版本)