我正在使用Perl v5.18.2。
我希望散列元素按照Perl的模块的顺序打印,但是哈希似乎只被排序,直到它被传递给Template。
use strict;
use warnings;
use Tie::IxHash;
use Template;
use Test::More;
tie my %hash, 'Tie::IxHash';
%hash = ('one' => 1, 'two' => 2, 'three' => 3);
my %vars = ('hash' => \%has
我有两个数组,我想用它们来生成哈希表
use warnings;
use strict;
use List::MoreUtils;
use Tie::IxHash;
my %KEY_VALUE;
tie %KEY_VALUE,'Tie::IxHash';
my @KEY= qw(
0
0
5
1
1
1
2
2
2
2
3
4
);
my @VALUE= qw(
A
B
C
D
E
F
G
H
I
J
K
L
);
@KEY_VALUE{@KEY}=@VALUE;
print join("\t",%KEY_VALUE);
我得到的结果是:
0
我如何按顺序将这些数组保存到数组的散列中,而不是按字母顺序,只需按数组保存即可。
stackoverflow不允许我发布,因为没有足够的细节,所以我这样做了-
#!/usr/bin/perl
use warnings;
use strict;
use Tie::IxHash;
use Data::Dumper;
my @NAME= qw(AA AB AC BA BB BC CA CB CC AA AB AC BA BB BC CA CB CC AA AB AC BA BB BC CA CB CC AD CD CE CF BD BE);
my @FAMILY= qw(A A A B B B
我使用IxHash来记住散列的插入顺序。但是,当使用克隆来复制散列时,我得到一个空的散列。
use strict;
use Switch;
use Data::Dumper;
use Clone qw(clone);
use Tie::Autotie 'Tie::IxHash';
our %h_basic_values;
my $t = tie our(%h_inner_hash), "Tie::IxHash";
my $t1 = tie our(%h_inner_hash1) , "Tie::IxHash";
%h_inner_hash =
我正在尝试创建一个散列数组,每个散列都是一个绑定的、有序的IxHash。在遍历我的初始哈希时,键确实是按顺序排列的。然而,一旦我把它们推到一个数组上,排序就消失了。我知道当哈希被推到数组上时,我对它发生的事情知之甚少,但如果有人能告诉我,我将不胜感激。
#! /usr/bin/perl -w
use strict;
use Data::Dumper;
use Tie::IxHash;
my @portinfo;
tie (my %portconfig, 'Tie::IxHash',
'name' => [ 'Name',
我正在尝试创建一个哈希,以保留键被添加的顺序。在“创建哈希并保留的添加顺序”一节中,它给出了一个修改哈希的片段,因此当您执行keys时,它会按照插入到哈希中的顺序返回键。
当我执行以下代码片段时:
use strict;
our %foo;
use Tie::IxHash;
tie (%foo, Tie::IxHash);
它失败了,因为:
Bareword "Tie::IxHash" not allowed while "strict subs" in use at /nfs/pdx/home/rbroger1/tmp.pl line 4.
Execution
如何对类的散列成员进行排序?我的类看起来像这样
package TestSuiteInterface {
use Tie::IxHash;
sub new {
my ($class, $name) = @_;
my $self = {};
my %schedulerdata = {};
tie(%schedulerdata, 'Tie::IxHash');
$self->{name} = $name;
$self->{scheduler} =
我想增加哈希值,从每个$COMMUNITY的0开始,定义一个数组@指示器,从0到数组@NAME的相同索引,并将其推送到值,但这不是我想要的,我不知道如何实现。我非常清楚,这个值并不是按顺序排列的,因为数组中的位置不是先组织好的,而是如何准确地做到这一点,然后如何打印Sub散列$FAMILY的每个第一个值。例如,
community 0 = name 0 4 7
community 1 = name 0 3 8
community 2 = name 0 3 6
#!/usr/bin/perl
use warnings;
use strict;
use Tie::Autotie 'Ti
我使用XML::Simple来解析XML文件。下面给出了XML文件的代码
use Tie::IxHash;
tie %$data, "Tie::IxHash";
use XML::Simple;
use Data::Dumper;
$xml = new XML::Simple;
$data = $xml->XMLin("ship_order.xml");
print Dumper($data);
XML文件,(ship_order.xml)
<?xml version="1.0" encoding="UTF-8"
如何保持为第二个VAR添加散列元素的顺序?
(散列的散列)
例如:
use Tie::IxHash;
my %hash;
tie %hash, "Tie::IxHash";
for my $num (0 .. 5){
$hash{"FirstVal$num"}++;
}
for my $num (0 .. 5){
$hash{"FirstValFIXED"}{"SecondVal$num"}++;
}
print Dumper(%hash);
当转储结果时,$VAR14没有保留插入顺序:
$VAR1 =
尝试将散列引用存储在可存储的文件中,它运行良好。不过,我还需要将密钥按顺序排序--因此我使用了以下方法
tie %$hashref, 'Tie::IxHash'; store $hashref, $filename;
但是这是行不通的--文件被创建了,但是它的大小只有50个字节,当我使用retrieve()时,我得到一个空的散列。
我尝试使用Tie::IxHash::Easy (因为我的散列是散列的),但是没有用。有什么帮助吗?
我希望有一个Perl子例程,它通过Tie::IxHash模块创建并返回有序的散列。它看起来像这样:
sub make_ordered_hash {
my @hash_contents = munge_input(@_); # I get a list of alternating keys and values
tie(my %myhash, Tie::IxHash, @hash_contents);
return %myhash;
}
现在,如果我执行my %ordered_hash = make_ordered_hash(@input_stuff),%ordered
在下面的程序中使用散列计算实际列表的出现次数后,如何保持实际列表的顺序?例如,<DATA>是
a
b
e
a
c
d
a
c
d
b
etc.
使用散列,我计算了每个元素的出现次数。
我想要的是:
a 3
b 2
e 1
c 2
d 2
但下面的程序向我展示了不同的情况。
my (%count, $line, @array_1, @array_2);
while ($line = <DATA>) {
$count{$line}++ if ( $line =~ /\S/ );
}
@array_1 = keys(%count);
@array_2 =
请考虑以下示例:
use 5.010;
use Data::Dumper;
{
package MyTestPck;
use Data::Dumper;
use Tie::IxHash;
sub ordered_hash { # http://stackoverflow.com/a/3001400/277826
tie my %hash => 'Tie::IxHash';
%hash = @_;
\%hash
}
my $fields = ordered_hash(
(map { $_ => $_
下面的脚本将打印每个键的每个元素的所有标量值,如何仅打印散列中每个元素的第一个标量值。
#!/usr/bin/perl
use warnings;
use strict;
use Tie::IxHash;
my %KEY_VALUE;
tie %KEY_VALUE,'Tie::IxHash';
my %KEY_VALUE= (
0 => ['A','A','C','B','D'],
1 => ['C','C','C
我正在开发一种代码,它可以将句子拆分成单独的单词,然后根据散列关键字搜索单词的存在。我的代码返回100%相同的术语,在匹配之后,我用与匹配关键字相对应的值标记句子中的单词。问题是代码标签的条款,但随机值,而不是我所期望的。此外,在术语和散列键相似但不是100%相同的情况下,我如何编写正则表达式来匹配我的术语和键。注意:我已经将散列键的词干转换为它们的根形式。我可以提供一些例子:如果句子中的术语是协同的或反协同的,并且我的散列键是Synerg,我如何将上面的术语与Synerg匹配。
我的代码如下:
open IN, "C:\\Users\\Desktop\\TM\\clean_c
考虑一个包含以下内容的文本文件:
apple apple pear plum apple cherry pear apple
cherry plum plum pear apple cherry pear pear apple plum
考虑一下perl一行程序:
perl -pe "s/apple/green/g and s/pear/yellow/g and s/plum/blue/g and s/cherry/red/g" < fruits.txt
这会用水果的颜色来代替所有的水果。
现在,这是否可以在一个s/g中完成,而不是上面的四个?
我还关心水果词的顺序。
我正在开发一个催化剂应用程序,它使用Template::Toolkit作为模板引擎。一个页面需要一个相同输入元素的列表。它们可以从数组中提取,但我需要元素的排序顺序和描述性标签。
对于排序顺序,我会使用数组。对于存储每个键的附加值,哈希是完美的。如何将两种结合在TT中?我可以同时使用这两种方法,但这看起来很难看,而且在改变字段时可能会导致错误。
但是,我更喜欢在TT中这样做,因为表单元素的描述和顺序都是前端的事情。
这就是我在纯Perl中所做的工作:
#!/usr/bin/perl -w
use 5.10.0;
# definition of description and order i
为什么通过多次执行这个程序,合并散列的输出会发生变化?
use strict;
use warnings;
my %data1=(a=>'1',b=>'2',c=>'3');
my %data2=(d=>'4',e=>'5',f=>'6');
my %data3=(%data1,%data2);
while(my($key,$value)=each %data3)
{
print "$key:$value\n";
}
我已经验证了堆栈溢
在下面的代码中,我有一个与散列绑定的类。在FETCH函数中,我将打印键的JSON编码:
package Example::Tie;
use JSON;
my $json = JSON->new();
sub TIEHASH {
my ($pkg,@list) = @_;
bless { @list }, $pkg;
}
sub FETCH {
my ($tied,$key) = @_;
return $json->encode({key => $key});
}
package Example;
sub new {
my ($p
可以使用对象作为散列键吗?
例如,下面的代码允许我使用MyClass的一个实例作为键,但是当我迭代这些键并尝试调用get_value方法时,我得到了错误:
无法通过包"MyClass=HASH(0x12a4040)“定位对象方法"get_value”(也许您忘记加载“MyClass=HASH(0x12a4040)”?)
package MyClass;
use strict;
sub new
{
my $class = shift;
my $self = {
_value => shift
};
bless $self,
我有一个.sql文件,我正在从中读取我的输入。假设该文件包含以下输入...
Message Fruits Fruit="Apple",Color="Red",Taste="Sweet";
Message Flowers Flower="Rose",Color="Red";
现在,我已经编写了一个perl脚本来从该文件生成散列。
use strict;
use Data::Dumper;
if(open(MYFILE,"file.sql")){
my @stack;
my %has
我有一个关于如何打印散列的问题:
@language(1,2,3);
for my $i (0 .. $#language)
{
$statement = $db->selectall_arrayref(
"select word from words
left outer join language
on words.languageId = language.languageId
where words.languageId = $language;"
);
%words=((@language[$language])=&g
我想将文件的第7-12行复制到同一目录中的另一个.vect文件中,比如。
我希望每行复制两次,并将每行的两个副本连续粘贴到新文件中。
这是我到目前为止使用的代码,我想继续在Perl中使用这些方法/包。
use strict;
use warnings;
use feature qw(say);
# This method works for reading a single file
my $dir = "D:\\Downloads";
my $readfile = $dir ."\\2290-00002.vect";
my $writefile = $d
我尝试使用模块来编写包含10亿行的文本文件,但是它在编写了1600万行之后抛出了一个错误。
"Out of memory!"
"Callback called exit at C:/perl/lib/Tie/File.pm line 979 during global destruction."
这是我试过的代码。
use Tie::File;
tie @array, 'Tie::File', "Out.txt";
$start = time();
for ($i = 0; $i <=
我有一个文本文件(一个排序的行数组),其中列出了给定文本中单词形式(斜度)的出现情况及其与单词的初始形式的对应关系。我想修改这个文件,以便计算类似的表单,并用给定的表单、其出现的次数和初始表单创建一个新的文件(数组)。
我是用Perl编写的,但我认为它可以用伪代码解决。
my $word1 = '';
my $word2 = '';
foreach my $line(@lines) { #read the array by lines
$word1 = $line;
$word1 =~ s/(.+)WORD.+/$1/g; #the given for