Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基本Perl脚本的哈希数组_Perl - Fatal编程技术网

基本Perl脚本的哈希数组

基本Perl脚本的哈希数组,perl,Perl,我正在编写我的第一个Perl脚本,并逐行读取一个小文本文件。字段由“:”分隔,因此我希望使用第一个字段(名称)作为每个字段的键,将每个字段拆分为一个哈希数组。另外,(我想)我需要一个大的散列来保存所有信息,或者可能只是一个数组来保存每个字段,这样我就可以根据一个模式在一行上打印所有信息。我还没有到%info在散列赋值中创建奇数元素的地步。我应该让它成为一个规则数组吗?我这样做对吗?基本上,行的顺序是这样的 #/usr/bin/perl-w 严格使用; 打印$#ARGV; 如果($#ARGV==-

我正在编写我的第一个Perl脚本,并逐行读取一个小文本文件。字段由“:”分隔,因此我希望使用第一个字段(名称)作为每个字段的键,将每个字段拆分为一个哈希数组。另外,(我想)我需要一个大的散列来保存所有信息,或者可能只是一个数组来保存每个字段,这样我就可以根据一个模式在一行上打印所有信息。我还没有到
%info
在散列赋值中创建奇数元素的地步。我应该让它成为一个规则数组吗?我这样做对吗?基本上,行的顺序是这样的

#/usr/bin/perl-w
严格使用;
打印$#ARGV;
如果($#ARGV==-1)
{
打印“脚本需要1个参数。\n”;
出口1;
}
my$infle=$ARGV[0];
#打开传递的文件
打开(在“$infle”中)| | die“无法打开:$!”#打开databook.txt
我的%info=(我的%姓名,我的%电话,我的%地址,我的%日期,我的%工资);
while()
{
%信息=(拆分/:/)[1];
}
关闭($infle);

首先,您应该根据解析信息的使用方式定义数据结构。如果使用名称作为索引来搜索信息,我建议使用嵌套哈希,按名称索引:

{name => {phone => ..., address => ..., date => ..., salary => ...}, ...}
如果不打算使用名称作为索引,只需将信息存储在数组中:

[ {name => ..., address => ..., date => ..., salary => ...}, 
  {name => ..., address => ..., date => ..., salary => ...}, ...]
在大多数情况下,我会使用第一个

其次,Perl中的数组和哈希是平面的。因此:

my %info = (my %name, my %phone, my %address, my %date, my %salary);
没有道理。使用ref来存储数据

最后但并非最不重要的一点是,Perl为输入文件提供了语法糖。使用
从参数中读取文件,而不是显式打开文件。这使得这个程序更“完美”

使用严格;
使用警告;
使用数据::转储程序;
我的$info={};
而(){
咀嚼;
我的@items=split/:/,$;
$info->{$items[0]}={phone=>$items[1],
地址=>$items[2],
日期=>$items[3],
工资=>$items[4]};
}
打印转储程序$info;

首先,您应该根据解析信息的使用方式定义数据结构。如果使用名称作为索引来搜索信息,我建议使用嵌套哈希,按名称索引:

{name => {phone => ..., address => ..., date => ..., salary => ...}, ...}
如果不打算使用名称作为索引,只需将信息存储在数组中:

[ {name => ..., address => ..., date => ..., salary => ...}, 
  {name => ..., address => ..., date => ..., salary => ...}, ...]
在大多数情况下,我会使用第一个

其次,Perl中的数组和哈希是平面的。因此:

my %info = (my %name, my %phone, my %address, my %date, my %salary);
没有道理。使用ref来存储数据

最后但并非最不重要的一点是,Perl为输入文件提供了语法糖。使用
从参数中读取文件,而不是显式打开文件。这使得这个程序更“完美”

使用严格;
使用警告;
使用数据::转储程序;
我的$info={};
而(){
咀嚼;
我的@items=split/:/,$;
$info->{$items[0]}={phone=>$items[1],
地址=>$items[2],
日期=>$items[3],
工资=>$items[4]};
}
打印转储程序$info;

So,chomp off eol(忘记)将分隔字段存储到一个名为items的数组中,然后存储在一个嵌套的散列(措辞?)中,其中键是名称“$items[0]。这听起来正确吗?@user2079828是的,这就是我的意思。谢谢你,我只是想确切地理解语法的含义。仍然在学习一切。好的,这是有道理的。我已经看了很多代码引用,但似乎不能把任何连贯的东西放在一起。这应该可以让我开始了,谢谢。我通常只对短程序使用
。因此,chomp off eol(忘记)将分隔字段存储到一个名为items的数组中,然后存储在一个嵌套的散列(措辞?)中,关键字是名称“$items[0]。这听起来正确吗?@user2079828是的,这就是我的意思。谢谢你,我只是想确切地理解语法的含义。仍然在学习一切。好的,这是有道理的。我已经看了很多代码引用,但似乎不能把任何连贯的东西放在一起。这应该让我开始了,谢谢。我通常只使用
来编写简短的程序。