标签: perl-data-structures

缩短代码:从哈希合并数组

我有一个哈希列表,一些哈希包含一个提供数组本身的键.

my @cars = (
   { # empty car
      name => "BMW",
   },
   { # car with passengers
      name => "Mercedes",
      passengers => [qw(Paul Willy)],
   },
   ...
)
Run Code Online (Sandbox Code Playgroud)

它几乎就像上面但当然不是以愚蠢的汽车为例:-)

现在我需要从所有哈希中获得所有"乘客"的列表,包括那些甚至不提供乘客阵列的乘客.

在第二步中,我需要从列表中检索唯一条目(实际上乘客是Perl对象引用,我需要列表中的每个对象一次)

目前我这样做:

my (@all, @passengers, %seen);
for(@cars) {
    push @all, @{$_->{passengers}} if $_->{passengers};
}

@passengers = grep { ! $seen{$_} ++ } @all;
Run Code Online (Sandbox Code Playgroud)

我想摆脱@all并将所有乘客的名单直接扔进去grep.

有什么建议?

perl refactoring perl-hash perl-data-structures

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

解析perl数组

我不熟悉perl,我正在尝试编辑irssi翻译脚本.Web请求的结果返回为:

$result = {
 "data" => {
  "translations" => [
   {
    "translatedText" => "Halloween"
   }
  ]
 }
}
Run Code Online (Sandbox Code Playgroud)

我如何只获取translatedText部分,以便

$string = 'Halloween'
Run Code Online (Sandbox Code Playgroud)

谢谢.

perl perl-data-structures

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

perl使用coderef作为子例程的参数

我有以下子程序:

sub my_sub {
    my $coderef = shift;    
    $coderef->();
}


sub coderef {
    my $a = shift;
    my $b = shift;

    print $a+$b;
}
Run Code Online (Sandbox Code Playgroud)

并希望以my_sub(\coderef($a,$b))这种方式调用,即我想提供代码ref的参数,并在my_sub函数上运行它.在perl中可以做这样的事情吗?

perl callback perl-data-structures

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

数组数组的哈希元素

我希望"testhash"是一个哈希,其密钥为"hashelm",其中包含一个数组或一个数组.

我这样做:

$testhash{hashelm}=(
        ["1A","1B"],
        ["2A","2B"]
);

print Dumper(%testhash);
Run Code Online (Sandbox Code Playgroud)

但我得到这个作为输出:

$VAR1 = 'hashelm';
$VAR2 = [
          '2A',
          '2B'
        ];
Run Code Online (Sandbox Code Playgroud)

我希望更像是:

$VAR1 = 
   hashlelm => (
        [
          '1A',
          '1B'
        ];
        [
          '2A',
          '2B'
        ];
   )
Run Code Online (Sandbox Code Playgroud)

我错过了什么?我已经使用perl 多年了,这个真的让我难过!

perl perl-data-structures

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

对哈希的arrayref进行排序

我在尝试根据散列中的值对哈希的arrayref进行排序时遇到了麻烦,数据结构如下所示:

my %usera = (name => 'tom',
             weight=> 10);
my %userb = (name => 'harry',
             weight=> 1);
my %userc = (name => 'peter',
             weight=> 5);
my $users = [];
push(@$users,\%usera,\%userb,\%userc);
Run Code Online (Sandbox Code Playgroud)

我想按重量降序对结果进行排序,所以它会按照"汤姆,彼得,哈利"的顺序排列,但我没有太多运气.我试过了:

for my $user (sort{ $users->[$a]{'Weight'} <=> $users->[$b]{'Weight'} } @$users){
    .....
}
Run Code Online (Sandbox Code Playgroud)

我认为可能有用,但没有爱.

任何的想法?

TIA!

sorting perl perl-data-structures

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

在perl中编写和读取XML的最佳方法是什么?

我正在使用Perl程序,只需使用打开,打印,关闭的典型函数就可以写入XML文件.XML文件稍后由PHP Web应用程序消化.

#!/usr/bin/perl
#opening file
open FILE, ">derp.xml" or die $!;

#data is created in variables like so...
$first       = '<\?xml version=\"1.0\" encoding=\"UTF-8\" \?>';
$openperson  = '<person>\n';
$name        = '<name>Gary</name>\n';
$birthday    = '<brithday>01/10/1999</birthday>\n';
$car         = '<car>minivan</car>\n';
$closeperson = '</person>\n';

#writing variables to file
print FILE $first;
print FILE $openperson;
print FILE $name;
print FILE $birthday;
print FILE $car;
print FILE $closeperson;
close FILE;
Run Code Online (Sandbox Code Playgroud)

或多或少这基本上是当前系统的工作方式.我相信一定有更好的方法.

xml perl perl-data-structures

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

使用单个哈希的副本填充perl哈希数组

我搜索并搜索过,但我找不到任何我发现的代码.我很抱歉,如果这是重复旧的,但我现在花了2天试图让这10行工作,我在我的智慧结束没有留下头发:-(

我正在运行Perl 5.8.8.

我想在Perl中填充哈希数组,使其包含我正在更新的单个哈希变量的多个副本.我的代码在这里:

use strict;
use warnings;

my @array;

my %tempHash = (state => "apple", symbol => "54", memberId => "12345");
push(@array, \%tempHash);

%tempHash = (state => "tiger", symbol => "22", memberId => "12345");
push(@array, \%tempHash);

%tempHash = (state => "table", symbol => "37", memberId => "12345");
push(@array, \%tempHash);

printf("%p %p %p\n", $array[0], $array[1], $array[2]);

foreach my $entry (@array){
    printf("state: %s\n", $entry->{state});
    printf("memberId: %s\n", $entry->{memberId});
    printf("symbol: %s\n\n", $entry->{symbol});
}
Run Code Online (Sandbox Code Playgroud)

这会产生以下输出:

1868954 18688d0 18688c4
state: table
memberId: 12345 …
Run Code Online (Sandbox Code Playgroud)

perl copy reference perl-data-structures

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

Perl只打印一行,但打印到屏幕上

我正在尝试打印符合我特定条件的设备列表.当我将所有内容打印到屏幕上时,效果很好.但是,当我将其打印到文件时,它只打印一行.我是perl的新手,所以任何帮助都将不胜感激.谢谢

$dbConnection = &openConnection();
# run the "list_device" command via the initial connection
my $device_list = $dbConnection->list_device();
foreach my $listDevices ($device_list->result()) {
    if (   ($listDevices->model !~ /PIX/)
        && ($listDevices->model !~ /ASA/)
        && ($listDevices->model !~ /ACE/)
        && ($listDevices->driverName !~ /Context/)
        && ($listDevices->hostName =~ /^ls1.*/i)
        && ($listDevices->vendor =~ /Cisco/)
    ) {
        #create device hash for LS
        $deviceHash{"deviceID"}         = $listDevices->deviceID;
        $deviceHash{"deviceType"}       = $listDevices->deviceType;
        $deviceHash{"vendor"}           = $listDevices->vendor;
        $deviceHash{"model"}            = $listDevices->model;
        $deviceHash{"primaryIPAddress"} = $listDevices > primaryIPAddress;
        $deviceHash{"hostName"}         = $listDevices->hostName;

        # mapping array
        my @returnData = …
Run Code Online (Sandbox Code Playgroud)

perl perl-module mod-perl perl-data-structures

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

将哈希传递给已经传递该哈希的子例程内的子例程

我正在将哈希传递给各种子例程,我想知道如何将哈希传递给子例程,然后将该子例程中的相同哈希传递给不同的子例程,依此类推.

例如,以下代码工作正常.

use strict;
use warnings;

my %hash = ( 
    key1 => 'value1',
    key2 => 'value2',
    key3 => 'value3',
    key4 => '', 
);      

print %hash, "\n"; 
check_it(\%hash);

sub check_it {
    my $params = shift; 

    foreach(keys %{$params}){        
        if($params->{$_}) {
            print "'$_' defined as '$params->{$_}'\n";
        }   
        else {
            print "'$_' not defined as '$params->{$_}'. Deleting it.\n"; 
            #delete $params->{$_};
            $params->{$_} = 'null';
        }     
    } 

    for ( my $i = 0 ; $i < 7 ; $i++ ) {
        print "looping\n";
        &check_tags_again(\%hash);
    }     
} …
Run Code Online (Sandbox Code Playgroud)

perl hash perl-data-structures

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

在PHP中使用Perl的Data :: Dumper格式数组

我需要访问一个由Perl的Data :: Dumper输出的数组.
Array是一个原始文件,我需要用php访问它.
数组格式如下:

$stats = {
  'days' => 25,
  'lengths' => {
    'Piwee' => 269,
    'Jeanne-' => 904,
    'kaAnar' => 340,
[... Very Big ARRAY....]
Run Code Online (Sandbox Code Playgroud)

我在这里找到了这个解决方案,但我不想使用eval(),因为这个数组将具有用户输入数据.因为在str_replace解决方案的情况下我总是需要eval()输出,我想我需要找到另一种方法来做到这一点.
也许转换为XML或直接PHP解析?
我不确定这里最好的解决方案是什么.

perl/PHP/bash解决方案没问题

注意1:我无法编辑输出此原始文件的Perl代码
注2:我不在Perl中编码所以我不知道如何使用这些数据

php arrays perl type-conversion perl-data-structures

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