这是一个循环,数组不会被覆盖,它只会增长.
for ( $j=0; $j <=$#just_ecps ; $j++){
print "$just_ecps[$j]\n";
for ($x=0; $x<=$#folder_dates ; $x++){
my $archivo_histo = "/home/ha2_d11/data/ibprod/archive/$folder_dates[$x]/$just_ecps[$j]/ghistogram.gz";
next unless (-r $archivo_histo);
open(FILEHANDLE, "gunzip -c $archivo_histo |") or die ("could not open file $archivo_histo");
while (<FILEHANDLE>) {
if ($_ =~ /ave:\s+(\d+\.\d+)\s/){
push ( @ecp_average , $1);
sleep 1;
}
print "@ecp_average\n";
}
}
Run Code Online (Sandbox Code Playgroud)
在每个实例中,最后三个值都是有效的,之前的所有值都是重复的.我需要摆脱重复,只保留最后三个值.
Eislnd1
0.00420743 0.00414601 0.0044511
Eislnd2
0.00420743 0.00414601 0.0044511 0.00303575 0.00309721 0.00302753
Eislnd3
0.00420743 0.00414601 0.0044511 0.00303575 0.00309721 0.00302753 0.0031753 0.00324729 0.00295381
Eislnd4
0.00420743 0.00414601 0.0044511 …Run Code Online (Sandbox Code Playgroud) 我想编写一个perl程序来生成具有长度为8的非重复单位数字(随机顺序的数字1-8)和第九个元素作为下划线的数组.我写了这样的代码.我想将这个生成的数组用于基于数字的益智游戏.
@mat = (0,0,0,0,0,0,0,0,0);
sub randgen {
$randigit = int(rand(9));
if ($randigit == 0) {
&randgen;
}
elsif ( $mat[0] == $randigit
|| $mat[1] == $randigit
|| $mat[2] == $randigit
|| $mat[3] == $randigit
|| $mat[4] == $randigit
|| $mat[5] == $randigit
|| $mat[6] == $randigit
|| $mat[7] == $randigit
|| $mat[8] == $randigit
)
{
&randgen;
}
}
&randgen;
for ( $assign = 0; $assign <= 8; $assign++) {
$mat[$assign] = $randigit;
print "@mat \n"; # To see to …Run Code Online (Sandbox Code Playgroud) 如果我理解perldoc perlop正确,这个操作应该是未定义的:
溢出整数范围的结果是未定义的,因为它在C中也是未定义的.换句话说,使用32位整数
1 << 32是未定义的.通过负位数移位也是不确定的.
我注意到我的设置中有两件事我无法解释:
1 << -1返回9223372036854775808without bigint或integerpragma(NaN在它们处于活动状态时返回).
> perl -le "print 1<<-1"
9223372036854775808
Run Code Online (Sandbox Code Playgroud)1 << -1在测试时返回true defined,无论bigint或integerpragma是否生效
> perl -le "print 'yes' if defined(1<<-1)"
yes
> perl -le "use integer; print 'yes' if defined(1<<-1)"
yes
> perl -le "use bigint; print 'yes' if defined(1<<-1)"
yes
Run Code Online (Sandbox Code Playgroud)我的设置细节:
> perl -V
Set up gcc environment - gcc.exe (rubenvb-4.5.4) …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个计算股票股息的计划.我没有子程序就这样做了.现在,我正在尝试修改它,以便它可以使用递归例程运行.对此有何帮助?因为我不是很擅长这个.
这是原始剧本+可悲的尝试.
print "A stock xyz's price is now $100. It has 3.78% dividend. You have 1000 of it and reinvest the dividend into the stock.\n";
my %hash;
@stocknum = 1000;
@dividend = 6780;
while ($#dividend != 20) {
$a = $dividend[-1];
$stock = $stocknum[-1];
$div_total= $stock*100*0.0678;
$stock_total = $stock + int($a/100);
push (@stocknum, $stock_total);
push (@dividend, $div_total);
if ($#dividend == 20) {
last;
}
}
shift (@dividend);
$stock_num = $stocknum[-1];
$div = $stock_num*100*0.0678;
push (@dividend, $div);
@hash{@stocknum} = @dividend; …Run Code Online (Sandbox Code Playgroud) 如何将多行字符串转换为数组?
my $text= " ads da
sda
s
da
d
as
das
d a as dasd
\n
";
Run Code Online (Sandbox Code Playgroud)
注意:我不想删除或删除换行符?