我有一个哈希列表,一些哈希包含一个提供数组本身的键.
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,我正在尝试编辑irssi翻译脚本.Web请求的结果返回为:
$result = {
"data" => {
"translations" => [
{
"translatedText" => "Halloween"
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
我如何只获取translatedText部分,以便
$string = 'Halloween'
Run Code Online (Sandbox Code Playgroud)
谢谢.
我有以下子程序:
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中可以做这样的事情吗?
我希望"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 多年了,这个真的让我难过!
我在尝试根据散列中的值对哈希的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!
我正在使用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)
或多或少这基本上是当前系统的工作方式.我相信一定有更好的方法.
我搜索并搜索过,但我找不到任何我发现的代码.我很抱歉,如果这是重复旧的,但我现在花了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的新手,所以任何帮助都将不胜感激.谢谢
$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) 我正在将哈希传递给各种子例程,我想知道如何将哈希传递给子例程,然后将该子例程中的相同哈希传递给不同的子例程,依此类推.
例如,以下代码工作正常.
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的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中编码所以我不知道如何使用这些数据