【发布时间】:2020-02-07 16:56:49
【问题描述】:
我需要从下面显示的每一行中 grep 一个特定的值:
ABC_ROOT|/home/pulkit/pulkit_test/ABC/ABC-012/ABC04.16.103/lnx86
DEF_ROOT|/home/pulkit/pulkit_test/DEF/DEF192/DEF19.20.100/lnx86
GHI_ROOT|/home/pulkit/pulkit_test/GHI/GHI19.10.199/lnx86/tools.lnx86
JKL_ROOT|/home/pulkit/pulkit_test/JKL/JKL19.00.000/lnx86
从以上行中,我想提取具有版本号的值(ABC04.16.103、DEF19.20.100、GHI19.10.199、JKL19.00.000)并使用 Perl 将这些值存储在哈希中。为了将这些值存储在一个数组中,我在本网站的帮助下使用了以下代码:
use strict;
use warnings;
open (File, "/home/pulkit/pulkit_test/abc_test.txt");
my @value;
map { m|/([^/]+)/lnx\d+| and push @value, $1 } <File>;
print join( "\n" , @value,"\n");
由于我对 perl 很陌生,请有人帮忙我如何将这些值存储在哈希中。
谢谢
【问题讨论】:
-
哈希是一个关联数组,这意味着每个元素都有一个key和一个value。
ABC04.16.103是应该作为元素的key还是value,另一个应该是什么? -
提示:
my @value; map { m|/([^/]+)/lnx\d+| and push @value, $1 } <File>;是一种非常糟糕的写作方式my @value = map { m|/([^/]+)/lnx\d+| } <File>; -
提示:你不应该使用两个参数 open。使用
my $qfn = "..."; open(my $fh, '<', qfn) or die("Can't open \"$qfn\": $!\n");还要注意我如何避免对文件句柄使用全局变量,以及如何添加错误检查。 (open很容易出错,最好在错误信息中包含文件名。) -
提示:
m{...}优于m|...|,因为|常用于正则表达式模式。 -
提示:在一个数组中包含多个“值”,那么
@values是比@value更好的名称。 (如果数组表示单个值的不同部分,则使用@value。)
标签: perl