小编dgB*_*gBP的帖子

Perl - 如何在哈希中获取前一个键?

我有一个哈希,其中填充了未知数量的字符串键.每个键的值为零以启动.

我想迭代这个哈希并为除第一个之外的每个元素,使其值等于我在另一个哈希中的等价物加上此哈希中的先前值.所以在数学上类似于:

hash1:a = hash2:a;
hash1:b = hash2:b + hash1:a;
hash1:c = hash2:c + hash1:b;
hash1:d = hash2:d + hash1:c;
hash1:e = hash2:e + hash1:d;
...
Run Code Online (Sandbox Code Playgroud)

我甚至不确定我知道如何做第一个,因为我不知道价值或关键是什么.我打算先对它进行排序,但由于键可能是列表中的任何键,我无法指定首先是什么.我不知道如何根据键引用以前的值.这可能吗?

(我没有任何代码表明我害怕,我试过但我只是意识到这是非常错的哈哈)

perl hash loops key-value

1
推荐指数
1
解决办法
884
查看次数

实用的Perl解决方案,通过列表排列独特的组合

抱歉,如果这看起来像另一个问题 - 有很多解决方案,我没有找到我正在寻找的东西,但我可能错过了它.如果标题不是最佳描述,也要道歉 - 不确定如何说出来.

我有五个'特征'作为字符串,例如:

$height $width $depth $length $colour
Run Code Online (Sandbox Code Playgroud)

我希望得到所有不同的独特组合,从5开始,然后下降到1,例如:

5: $height $width $depth $length $colour
4: $height $width $depth $length 
4: $height $width $depth $colour
4: $height $width $length $colour
4: $height $depth $length $colour
4: $width $depth $length $colour
...
and so on 
...
1: $height 
1: $width 
1: $depth 
1: $length 
1: $colour
Run Code Online (Sandbox Code Playgroud)

我不知道这是否有差别,但在代码中,我打算使用&&!$string,例如:

4: $height && $width && $depth && $length && !$colour 
4: $height && $width && …
Run Code Online (Sandbox Code Playgroud)

perl combinations permutation

1
推荐指数
1
解决办法
516
查看次数

Perl mysql,为什么这个fetchrow_array不起作用?

我有这样的Perl代码:

$pre = $dbh->prepare("select distinct skills from people");
$pre->execute;

my @preList;
while (my $row = $pre->fetchrow_array()) {
    push (@preList,$row);
}
print "Pre list: $_" foreach @preList;
Run Code Online (Sandbox Code Playgroud)

当我在sql中尝试完全相同的语句时,它可以很好地工作,但是当我运行这个程序时,它什么都没打印出来(暗示是空的@preList).我可能正在做一些非常愚蠢的事情,但看不到它.我之前使用过这种格式来获取数据,效果很好.谁能看到我做错了什么?

mysql perl

1
推荐指数
1
解决办法
6933
查看次数

有没有办法在使用严格的时候从Perl中的字符串/变量创建变量?

我有一些这样的陈述:

my $name = $criteria->{'name'} if $criteria->{'name'};
my $age  = $criteria->{'age'}  if $criteria->{'age'};
my $dob  = $criteria->{'dob'}  if $criteria->{'dob'};
.
.
.
# there are around 8 of these
Run Code Online (Sandbox Code Playgroud)

我想做类似的事情:

foreach (qw/name age dob .../) {
    ${$_} = $criteria->{$_} if $criteria->{$_};
}
Run Code Online (Sandbox Code Playgroud)

我确定我之前已经这样做了,但是当我尝试使用use strict它时发出错误.

有没有办法做到这一点?或者有更好的方法来做我想要的吗?我真的很懒,但如果有办法,那就很有趣了.

如果可以的话,以内存方式运行会更有效吗?我正在努力提高脚本的速度.

variables perl

1
推荐指数
1
解决办法
61
查看次数

我可以使用其他文件的哈希值吗?

我在perl文件中有一个哈希(让我们称之为test2.pl),如下所示:

our %hash1;

my %hash2 = {
    one   => ($hash1{"zero1"},  $hash1{"one1"}  ),
    two   => ($hash1{"one1"},   $hash1{"two1"}  ),
    three => ($hash1{"two1"},   $hash1{"three1"}),
    four  => ($hash1{"three1"}, $hash1{"six1"}  ),
    five  => ($hash1{"six1"},   $hash1{"one2"}  ),
    six   => ($hash1{"one2"},   $hash1{"two2"}  ),
    last  => ($hash1{"two2"},   $hash1{"last1"} ),
};
Run Code Online (Sandbox Code Playgroud)

这得到6个Use of uninitialized value in anonymous hash ({}) at test2.pl line 7.错误(文件中的第7行对应于该my %hash2行,所有错误都表示第7行).

我只能假设这是因为%hash1在另一个调用此文件的文件(test1.pl)中定义.我认为使用our就足以定义它了.我是否必须初始化哈希中的所有变量才能使其工作?

(我正在使用括号,our因为我已经在那里声明了其他变量.)

variables perl hash

0
推荐指数
1
解决办法
1386
查看次数

给定这些字符串的任意排序,如何对字符串数组进行排序?

我希望对字符串数组进行排序,以便字符串按以下顺序排列:

@set = ('oneM', 'twoM', 'threeM', 'sixM', 'oneY', 'twoY', 'oldest');
Run Code Online (Sandbox Code Playgroud)

你可能会注意到,这些代表时间段,所以oneM是第一个月,等等.我的问题是我想按时间段排序,但是对于字符串,我不能只使用'sort',所以我创建了这个哈希来表达字符串应该如何排序:

my %comparison = (
    oneM    => 1,
    twoM    => 2,
    threeM  => 3,
    sixM    => 6,
    oneY    => 12,
    twoY    => 24,
    oldest  => 25,
);
Run Code Online (Sandbox Code Playgroud)

我希望这会让我的生活更轻松,我可以做一些事情,比如:

foreach my $s (@set) {
    foreach my $k (%comparison) {
        if ($s eq $k) {
            something something something
Run Code Online (Sandbox Code Playgroud)

我觉得这是一个漫长的做事方式,我不确定如果我找到相同的东西后我会如何实际排序......我想我有点想念自己的情节了所以任何帮助将不胜感激

根据要求,预期输出将如上所示在@set中显示.我应该已经提到@set中的值将是该集合的一部分,但不一定是所有这些值而不是相同的顺序.

sorting perl hash

0
推荐指数
2
解决办法
207
查看次数

在Perl中将哈希中的所有值相乘?

我想将哈希的所有值相乘而不必调用特定元素.例如:I DO NOT想要做的$hash{'kv1'} * $hash{'kv2'} * $hash{'kv3'},因为我不知道在哈希表元素做这个数.

我猜这里有一个简单而有效的功能,可能是使用each或者其他东西,但我找不到任何可以遵循的例子.有任何想法吗?

perl hash multiplication key-value

0
推荐指数
2
解决办法
455
查看次数

如何从perl中的特定字符截断字符串?

我有一个字符串'Basingstoke & Deane',我想检查'&'符号并剪切字符串(包括).

所以我的意见是: 'Basingstoke & Deane'

输出将是: 'Basingstoke '

我可以搜索'&'精细使用,$string =~ /&/并可以使用替换/删除它s/&//,但我有一个如何删除&和其后的所有字符的心理块.留下的额外空间无关紧要.

这是许多字符串中的一个,因此通用解决方案将是最佳的.如果以前曾经问过这个问题,我已经看到很多关于截断字符串的substr问题和搜索特定字符串的问题,等等,但是我没有找到什么.任何帮助赞赏.

regex perl

0
推荐指数
1
解决办法
401
查看次数