使用 perl 在 'ifdef 下创建数组字段
creating array fields under 'ifdef using perl
我正在编写一个创建名称数据库的脚本,这个数据库有不同的版本。
我的脚本正在获取版本作为输入(在没有输入的情况下它有一个默认版本)
每个数据库版本都基于以前的版本,但包含一些额外的名称。
我正在尝试找到一种方法来将我的数组中的一些条目定义为 iversion 的函数。
因此我使用类似 verilog IFDEF
的东西
例如:
my @DATABASE = (
"Arik",
"Ben",
if ($version = 1.3) {
"Suzie",
"Dan",
}
"Roth"
);
在这个例子中,名字 Arik、Ben 和 Roth 将出现在所有版本的数据库中,但 Suzie 和 Dan 只会出现在 1.3 版数据库中
有什么好的方法吗?
不清楚你想要什么,但这可能会有所帮助
use strict;
use warnings;
use Data::Dump;
my $version = '1.3';
my @database = (
"Arik",
"Ben",
$version eq '1.3' ? (
"Suzie",
"Dan",
) : (),
"Roth",
);
dd \@database;
输出
["Arik", "Ben", "Suzie", "Dan", "Roth"]
是的,您可以使用 Ternary Conditional operator
:
my @DATABASE = (
"Arik",
"Ben",
$version == 1.3 ? ("Suzie", "Dan") : (),
"Roth"
);
my @DATABASE = (
"Arik",
"Ben",
$version == 1.3 ? "Suzie" : (),
$version == 1.3 ? "Dan" : (),
"Roth",
);
或
my @DATABASE = (
"Arik",
"Ben",
( $version == 1.3 ? (
"Suzie",
"Dan",
) : () ),
"Roth",
);
或
sub cond { my $cond = shift; return $cond ? @_ : () }
my @DATABASE = (
"Arik",
"Ben",
cond($version == 1.3,
"Suzie",
"Dan",
),
"Roth",
);
或
my @DATABASE = (
"Arik",
"Ben",
( "Suzie" ) x $version == 1.3,
( "Dan" ) x $version == 1.3,
"Roth",
);
或
my @DATABASE = (
"Arik",
"Ben",
);
if ($version == 1.3) {
push @DATABASE, (
"Suzie",
"Dan",
);
}
push @DATABASE, (
"Roth",
);
或
my @DATABASE;
push @DATABASE, "Arik";
push @DATABASE, "Ben";
push @DATABASE, "Suzie" if $version == 1.3;
push @DATABASE, "Dan" if $version == 1.3;
push @DATABASE, "Roth";
我正在编写一个创建名称数据库的脚本,这个数据库有不同的版本。 我的脚本正在获取版本作为输入(在没有输入的情况下它有一个默认版本) 每个数据库版本都基于以前的版本,但包含一些额外的名称。
我正在尝试找到一种方法来将我的数组中的一些条目定义为 iversion 的函数。 因此我使用类似 verilog IFDEF
的东西例如:
my @DATABASE = (
"Arik",
"Ben",
if ($version = 1.3) {
"Suzie",
"Dan",
}
"Roth"
);
在这个例子中,名字 Arik、Ben 和 Roth 将出现在所有版本的数据库中,但 Suzie 和 Dan 只会出现在 1.3 版数据库中
有什么好的方法吗?
不清楚你想要什么,但这可能会有所帮助
use strict;
use warnings;
use Data::Dump;
my $version = '1.3';
my @database = (
"Arik",
"Ben",
$version eq '1.3' ? (
"Suzie",
"Dan",
) : (),
"Roth",
);
dd \@database;
输出
["Arik", "Ben", "Suzie", "Dan", "Roth"]
是的,您可以使用 Ternary Conditional operator
:
my @DATABASE = (
"Arik",
"Ben",
$version == 1.3 ? ("Suzie", "Dan") : (),
"Roth"
);
my @DATABASE = (
"Arik",
"Ben",
$version == 1.3 ? "Suzie" : (),
$version == 1.3 ? "Dan" : (),
"Roth",
);
或
my @DATABASE = (
"Arik",
"Ben",
( $version == 1.3 ? (
"Suzie",
"Dan",
) : () ),
"Roth",
);
或
sub cond { my $cond = shift; return $cond ? @_ : () }
my @DATABASE = (
"Arik",
"Ben",
cond($version == 1.3,
"Suzie",
"Dan",
),
"Roth",
);
或
my @DATABASE = (
"Arik",
"Ben",
( "Suzie" ) x $version == 1.3,
( "Dan" ) x $version == 1.3,
"Roth",
);
或
my @DATABASE = (
"Arik",
"Ben",
);
if ($version == 1.3) {
push @DATABASE, (
"Suzie",
"Dan",
);
}
push @DATABASE, (
"Roth",
);
或
my @DATABASE;
push @DATABASE, "Arik";
push @DATABASE, "Ben";
push @DATABASE, "Suzie" if $version == 1.3;
push @DATABASE, "Dan" if $version == 1.3;
push @DATABASE, "Roth";