小编dgB*_*gBP的帖子

为什么我似乎无法从 Perl 的数组中删除未定义的元素?

我有一个来自哈希表中数据的字符串数组。我试图删除任何(显然)空元素,但由于某种原因,似乎有一个顽固的元素拒绝去。

我在做:

# Get list array from hash first, then
@list = grep { $_ ne ' ' } @list; 
@list = uniq @list;
return sort @list;
Run Code Online (Sandbox Code Playgroud)

在这一grep行,我收到了Use of uninitialized value in string ne...下面正确打印的数组其余部分的消息。

我试过以“长”的方式做到这一点:

foreach (@list) {
    if ($_ ne ' ') {
        push @new_list, $_;
    }
}
Run Code Online (Sandbox Code Playgroud)

但这会产生完全相同的结果。我尝试使用defined预期的结果(没有)。

我可以预先对数组进行排序并删除第一个元素,但这似乎非常冒险,因为我不能保证数据集总是有空白元素。诉诸正则表达式似乎也有些过分,但也许我错了。像往常一样,我确定我遗漏了一些非常简单的东西。

arrays perl list

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

如何从Perl的随机时间戳中获取以纪元形式开始的月份?

我从数据库得到一些时间,我试图按月使用纪元表格存储它们.所以我可以有一些随机的时间,如:

1354120744
1328978360
1297388332
Run Code Online (Sandbox Code Playgroud)

并且对于每一个我想要找到代表该月的第一个的纪元值,因此对于最后一个时间戳,它将是:

1296518400(使用可爱epochconverter.com).

我知道我可以使用POSIX mktime将时间戳减少到几天,等等并相应地更改它们,就像我之前做过的帖子的答案一样:如何在Perl中回顾几个月,考虑到月份的不同日期?

我遇到的麻烦是,虽然我可以零次,但我担心通过更改日期与星期几不匹配,所以基本上是无效日期.这可能是一种不必要的担心; 如果时间得到验证,我不知道如果一周中的错误日期会有所不同.

我看不到任何其他似乎有用的POSIX方法.任何帮助赞赏!

perl epoch localtime

3
推荐指数
2
解决办法
1097
查看次数

我可以使用Template Toolkit找出变量是否为数组?

我将多选框的结果传递给页面,以便可以在屏幕上显示选择.由于它是多选的,结果可以是标量或数组引用.有没有办法找到这个?我在网上找不到任何东西,但我认为可能有一个.array或一个.array_ref令牌可用于验证.我正在使用Template Toolkit,Perl和Dancer.

所以这就是我得到的标量:

<% IF multitext %>
    Text: <% multitext %>
<% END %>
Run Code Online (Sandbox Code Playgroud)

我想要的是......

<% IF multitext %>
    <% IF multitext.array_ref %> <!-- whatever works! -->
        <% FOREACH text IN multitext %>
            Text: <% text %>
        <% END %>
    <% ELSE %>
        Text: <% multitext %>
    <% END %>
<% END %>
Run Code Online (Sandbox Code Playgroud)

html template-toolkit

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

搜索哈希值,如果值为零则删除它

我有一些代码如下.我试图通过哈希搜索,如果我遇到一个零值,我想删除整个键/值元素.

my %hashy = (
    a => my $a,
    b => my $b,
    c => my $c,
    d => my $d,
    e => my $e
);

$hashy{'a'} = 0;
$hashy{'b'} = 1;
$hashy{'c'} = 0;
$hashy{'d'} = 2;
$hashy{'e'} = 1;
my @keys = keys %hashy;
my @values = values %hashy;
my $ind = 0;
foreach my $v (@values) {
   delete $hashy{$keys[$ind]} if ($v == 0);
}
Run Code Online (Sandbox Code Playgroud)

因此,预期的打印输出%hashy将是:( b1d2e1忽略元素的顺序)

目前我得到:c0a0b1d2哪个甚至不接近...任何帮助将不胜感激:)

perl hash key-value

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

Perl正则表达式 - 我可以说'如果字符/字符串匹配,删除它以及它的所有权利'吗?

我有一个字符串数组,其中一些包含字符' - '.我希望能够搜索它以及包含它的那些字符串我希望删除它右侧的所有字符.

所以,例如,如果我有:

$string1 = 'home - London';
$string2 = 'office';
$string3 = 'friend-Manchester';
Run Code Online (Sandbox Code Playgroud)

或者这样的东西,然后受影响的字符串将成为:

$string1 = 'home';
$string3 = 'friend';
Run Code Online (Sandbox Code Playgroud)

我不知道之前' - '之前的空格是否会包含在字符串中(我不想要它,因为我将在稍后比较字符串,尽管如果它不影响字符串比较那么没关系).

我知道我可以使用以下内容搜索和替换特定的字符串/字符:

$string1 =~ s/-//
or 
$string1 =~ tr/-//
Run Code Online (Sandbox Code Playgroud)

但是我对Perl中的正则表达式并不是很熟悉所以我不是百分之百确定这些.我环顾四周,'to the right of'在正则表达式中看不到任何相关内容.帮助赞赏!

regex perl replace

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

使用Perl正则表达式搜索并替换一定长度的字符串

我试图搜索并替换长度为3个字符的字符串,没有任何内容(所以'删除'元素内容).

所以我有类似的东西:

foreach (@array) {
   s/^{1,3}$//;
}
Run Code Online (Sandbox Code Playgroud)

例如

@array = ('one', 'two', 'three', 'four', 'five', 'six', 'seven');
Run Code Online (Sandbox Code Playgroud)

因此,在打印时,预期输出将是:

result:  result:  result: three  result: four  result: five  result:  result: seven
Run Code Online (Sandbox Code Playgroud)

因此,对于受影响的输入,输出将是"空位".

目前这还没有发生......我打赌我犯了一个简单的错误,因为我对正则表达式的理解仍然不稳定.任何帮助赞赏!

如果有一种简单的方法可以在不创建新数组的情况下完全删除元素,那么知道这一点也很有用.

regex perl replace

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

为什么'1'被映射到perl中的hash?

我有一些像这样的代码:

print "key $_ - $hJobT{$_}\n" foreach keys %hJobT;
%hJobT = map { $_ => 1 } %hJobT;
print "key $_ - $hJobT{$_}\n" foreach keys %hJobT;
Run Code Online (Sandbox Code Playgroud)

当我运行程序并打印结果时,我得到:

key office - 1
key recon - 1
key office - 1
key 1 - 1
key recon - 1
Run Code Online (Sandbox Code Playgroud)

前两个结果来自第一个print语句并且是预期的.

key 1 - 1部分不是预期的.

为了澄清 - 代码处于一个循环中,当它迭代时,键值在某些条件下递增.出于测试目的,我在循环结束处放置了一个exit语句,因此它只显示第一个迭代结果,因此乳清它们为'1'.(就这样我似乎没有毫无意义地将1s映射到1s.)有关为什么我得到1-1映射的任何想法?

mapping perl hash

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

在某些实例中不能使用perl哈希键的数字?

快速问题......
为什么第一个关键工作而不是其他工作?也就是说,第二个键会引发语法错误.我之前使用过数字作为键,但是一旦我写' to'脚本变成黑色(也就是说,不是通常用于键的注释颜色).如果我拿走' to'它可以工作并在下一个键上抛出错误.

我可以没有以数字开头的数字和字母组合吗?

my %ranges = (
    under10 => "x < 10000",
    10to20  => "10000 <= x < 20000",
    20to30  => "20000 <= x < 30000",
    30to40  => "30000 <= x < 40000",
    40to50  => "40000 <= x < 50000",
    50to60  => "50000 <= x < 60000",
    60to70  => "60000 <= x < 70000",
    70to80  => "70000 <= x < 80000",
    80to90  => "80000 <= x < 90000",
    90to100 => "90000 <= x < 100000",
    100plus …
Run Code Online (Sandbox Code Playgroud)

perl key

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

我可以从perl中的模块调用.pl文件吗?

我已经从.pl文件创建了一个Perl模块,我正在测试它.它的工作原理直到它需要使用另一个.pl文件(提取一些sql语句).我正在调用该文件require 'file.pl';.这是一个临时解决方案,因为.pl将来可以通过更好的数据库解决方案替换该文件,但是现在我需要测试我的模块代码.它不喜欢试图找到该文件,不过,即使我已经把路径名称@INC使用use lib '/path/to/file'.

我可以使用任何临时解决方案来解决这个问题吗?我不知道.pl文件什么时候会被替换,所以我不能依赖等待.我是否应该将sql语句移动到.pm文件中,即使我以后必须删除它们,或者我是否必须搜索模块所在的文件夹中的.pl文件副本?

perl module

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

如何从同一个包中访问Perl中的对象功能

我正在制作一个Perl模块,我仍然在研究Perl如何处理对象.这是new我写的用于创建对象的子,我没有更新元素的问题:

sub new {
    my $class = shift;
    my ($self) = {
        name => undef
    };
    bless($self, $class);
    return $self;
}
sub get_name {
    my $self = shift;
    $self->{name} = 'Eve';
    return $self->{name};
}
Run Code Online (Sandbox Code Playgroud)

当我调用模块并从另一个文件访问它时,我可以使用该对象,但我想在模块代码中的其他区域使用对象中的数据.

所以我这样做没有问题:

my $new_object = new ProgramTest; # ProgramTest being the module/package
my $name = get_name();
Run Code Online (Sandbox Code Playgroud)

但是我想$self在"模块内部"方法中使用元素,这种方法永远不会被外部脚本访问.所以我想要这样的东西:

sub get_variables {
    return (name); # I don't know how to get the name here 
    # (I plan to have other variables, too)
}
Run Code Online (Sandbox Code Playgroud)

我可能错过了一些明显的东西(我确信当我看到解决方案时我会踢自己),所以任何帮助都表示赞赏!我希望这样,以便模块的其余部分可以使用变量(不更改),因为有条件依赖于它们的值.

oop perl module object

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

标签 统计

perl ×9

hash ×2

module ×2

regex ×2

replace ×2

arrays ×1

epoch ×1

html ×1

key ×1

key-value ×1

list ×1

localtime ×1

mapping ×1

object ×1

oop ×1

template-toolkit ×1