首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >推入Perl中的散列末尾

推入Perl中的散列末尾
EN

Stack Overflow用户
提问于 2012-07-20 13:25:38
回答 5查看 3.7K关注 0票数 2

所以我尝试用下面的代码来做的就是推送一个字符串,让我们把"this string“放到散列中每个键的末尾。我完全不知道该怎么做。下面是我的代码:

代码语言:javascript
运行
AI代码解释
复制
use warnings;
use strict;
use File::Find;

my @name;
my $filename;
my $line;
my @severity = ();
my @files;
my @info = ();
my $key;
my %hoa;
my $xmlfile;
my $comment;
my @comments;

open( OUTPUT, "> $ARGV[0]" );
my $dir = 'c:/programs/TEST/Test';

while ( defined( $input = glob( $dir . "\\*.txt" ) ) ) {
    open( INPUT, "< $input" );

    while (<INPUT>) {
        chomp;

        if (/File/) {
            my @line = split /:/;
            $key = $line[1];
            push @{ $hoa{$key} }, "Filename\n";
        }

        if ( /XML/ ... /File/ ) {
            $xmlfile = $1;
            push @{ $hoa{$key} }, "XML file is $xmlfile\n";

        }
        if (/Important/) {
            push @{ $hoa{$key} }, "Severity is $_\n";
        }
        if (/^\D/) {
            next if /Important/;
            push @{ $hoa{$key} }, "Given comment is $_\n";
        }
        push @{ $hoa{$key} }, "this string\n";
    }

}

foreach my $k ( keys %hoa ) {
    my @list = @{ $hoa{$k} };
    foreach my $l (@list) {
        print OUTPUT $l, "\n";
    }
}

}
close INPUT;
close OUTPUT;

其中"this string“是我试图将该字符串推送到数组末尾的位置。然而,最终的结果是它打印了三次"this string“,而不是像我想要的那样打印在每个键的末尾。当我试图将它放在while()循环之外时,它告诉我$key的值没有初始化。所以,有什么帮助吗?如果你需要澄清我的问题,尽管告诉我。谢谢!

EN

回答 5

Stack Overflow用户

发布于 2012-07-20 13:47:52

无意冒犯,但这段代码中有太多问题,我甚至不知道从哪里开始……

首先,“initialization block”(此脚本开头的所有这些my $something; my @somethings行)在Perl中不是必需的。事实上,它不仅仅是“多余的”--它实际上是令人困惑的:每当我遇到一个新的变量时,我不得不来回移动我的焦点,仅仅是为了检查它的类型。此外,即使有了所有这些,$input变量仍然没有声明为本地变量;它要么在注释中丢失,要么给出的代码有遗漏。

其次,为什么你声明你打算使用File::Find (很好)--但又根本不使用它?它可以极大地简化所有这些while(glob) { while(<FH>) { ... } }例程。

第三,我不确定为什么仅当读取的代码行与/File/匹配时才将某些内容赋值给$key -但是在其他所有情况下都使用它的值作为键。这是不是试图读取按部分组织的文件?然后,它可以更简单地完成,通过slurp/拆分或本地化$/变量……

无论如何,重点是如果扫描的文件的第一行与/File/不匹配,则前一行(即来自前一文件!)值被使用了--我不太确定它是不是有意的。如果第一个文件的第一行不是/File/-matched,则使用空字符串作为键-同样,它闻起来像是一个bug……

你能更详细地描述一下你的任务吗?给出一些测试输入/输出结果,也许...在短任务中进行,在进程中组织您的代码将是很棒的。

票数 3
EN

Stack Overflow用户

发布于 2012-07-20 14:47:20

你的程序构思不周,违反了很多好的实践规则。下面是一个具有更好结构的等效程序,而不是全部枚举。

我想知道您是否知道所有的if语句都将被测试并可能被执行?也许您需要使用elsif

除了在使用时$key可能是未定义的,您还将$xmlfile设置为$1,这将永远不会被定义,因为您的任何正则表达式中没有捕获。

从你的代码中不可能知道你想做什么,所以只有当你向我们展示你的输出,输入,并告诉我们如何从一个派生出另一个的时候,我们才能帮助你。

代码语言:javascript
运行
AI代码解释
复制
use strict;
use warnings;

use File::Find;

my ($outfile) = @ARGV;

my $dir = 'c:/programs/TEST/Test';

my %hoa;
my $key;

while (my $input = glob "$dir/*.txt") {

  open my $in, '<', $input or die $!;

  while (<$in>) {

    chomp;

    if (/File/) {
      my $key = (split /:/)[1];
      push @{ $hoa{$key} }, "Filename\n";
    }

    if (/XML/ ... /File/) {
      my $xmlfile = $1;
      push @{ $hoa{$key} }, "XML file is $xmlfile\n";
    }

    if (/Important/) {
      push @{ $hoa{$key} }, "Severity is $_\n";
    }

    if (/^\D/) {
      next if /Important/;
      push @{ $hoa{$key} }, "Given comment is $_\n";
    }

    push @{ $hoa{$key} }, "this string\n";
  }

  close $in;
}

open my $out, '>', $outfile or die $!;

foreach my $k (keys %hoa) {
  foreach my $l (@{ $hoa{$k} }) {
    print $out $l, "\n";
  }
}

close $out;
票数 3
EN

Stack Overflow用户

发布于 2012-07-20 13:47:26

根据您的代码,我怀疑设置了$key的行不会在每次循环中都被调用,并且您不会触发任何其他if语句。

这会将"this string“附加到数组的末尾。根据您在数组末尾得到的3个"this string“,我怀疑有两行没有经过if (/FILE/)或任何其他if语句。这将使$key值保持不变,最后,您将使用设置时$key的最后一个值将"this string“附加到数组中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11580305

复制
相关文章
使用 Typescript 对多个版本号序列排序
例如现在存在一组版本号,[{version: "0.12.0.2"}, {version: "0.1.0.2"}],按 version 排序后的结果为 [{version: "0.1.0.2"}, {version: "0.12.0.2"}]。
Yorkyu
2022/03/22
9660
centos7开机界面出现多个选项
第一个选项正常启动,第二个选项急救模式启动(系统出项问题不能正常启动时使用并修复系统)
全栈程序员站长
2022/06/29
1.6K0
centos7开机界面出现多个选项
springMvc 对多个视图后缀解析
springMvc 对多个视图后缀解析 如何配置? 代码如下:可以参考: <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:order="1"> <property name="prefix" value="/views/"/> <property name="suffix" value=".jsp"/> </bean> <bean class="org.sprin
爱明依
2019/03/12
1.2K0
centos7开机界面出现多个选项
第一个选项正常启动,第二个选项急救模式启动(系统出项问题不能正常启动时使用并修复系统)
用户1685462
2021/07/23
8590
ios开发中使用Masonry对多个视图进行均匀布局
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/80595105
用户1451823
2018/09/13
1.8K0
ios开发中使用Masonry对多个视图进行均匀布局
mybatis 使用tips - 使用多个参数
执行如下命令: mvn -Dmybatis.generator.overwrite=true mybatis-generator:generate 可以使用mybatis generator mybatis 使用多个参数 自定义方法需要根据多个查询条件去查询: SELECT * FROM `db_demo`.`hot_topic` WHERE lang='english' AND category='017' AND topic_type='video' ORDER BY score DESC; 推荐使用
千往
2018/01/24
1.7K0
使用VIM搜索多个文件[通俗易懂]
使用vim可以方便的搜索多个文件,这个时侯需要使用的命令是:vimgrep。vimgrep的命令格式是:
全栈程序员站长
2022/11/09
2.1K0
使用mysqldump备份多个库
一个数据库实例中有20+个库,本次备份需要备份其中的10+个库,使用mysqldump直接进行备份踩到一个warning和一个error。
阿dai学长
2020/05/27
4.1K0
批量对多个测序文件进行fastqc
现在一共是728*2=1456个测序文件,需要全部进行质控。 fastqc的命令很简单,直接跟文件即可,参数里面主要用-o(输出路径)和-t(线程,一般用2或4)
Y大宽
2019/05/29
3.9K0
python字典批量删除多个键值对(连续)
  搜不到字典批量删除多个键值对的方法,换了个搜索姿势,批量取N个元素,那么组合一下,就出来了!
逆向小白
2023/10/16
2130
python字典批量删除多个键值对(连续)
Arduino如何同时使用多个串口
如果想要给Arduino UNO R3同时接上WiFi模块和蓝牙模块时,但是Arduino的串口只有一个,怎样才能让Arduino同时使用多个串口呢?
小雨coding
2020/06/09
4.8K0
Arduino如何同时使用多个串口
Swift 使用lexicographicallyprecedes 多个参数排序
版权声明:转载请标明出处 https://blog.csdn.net/ZY_FlyWay/article/details/89184264
星宇大前端
2019/04/18
1.2K0
Swift  使用lexicographicallyprecedes 多个参数排序
多个php版本的composer使用
因为项目中使用swoole开发,一直使用win10 ubuntu子系统开发,随着代码量的增加,每次启动越来越慢。swoole官方提供了一个windows版swoole,启动速度特别快。但是由于其使用cgwin编译,所以无法正常使用composer,每次都需要切换php的环境变量。于是就想能不能让composer 识别我原来的php版本。打开composer的根文件试试真的可以。
高久峰
2023/06/29
6190
msyql多个or,and,
where (`to`= 2 and `from`= 8) or (`to`= 8 and `from`= 2) and from_unixtime(a.time,’%Y-%m-%d’) =’2017-05-31′ order by a.time desc
全栈程序员站长
2022/07/20
2990
使用shell并行执行多个脚本
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wzy0623/article/details/53906996
用户1148526
2019/05/25
3.4K0
VisualStudio 使用多个环境进行调试
在 VisualStudio 2017 支持使用 launchSettings.json 文件定义多个不同的环境进行调试
林德熙
2018/09/19
7340
VisualStudio 使用多个环境进行调试
使用python给outlook多个联系
如果报错:com_error: (-2147221008, '\xc9\xd0\xce\xb4\xb5\xf7\xd3\xc3 CoInitialize\xa1\xa3', None, None)
py3study
2020/01/08
7000
使用python合并多个pdf文件
今天需要整理一份资料,需要把多个pdf合并为一个,wps这些软件自然是有这个功能,但一般都是收费的,百度上也有很多网站,但资料上传到别人的网站,始终觉得还是不太可靠,故自己搜索了一下使用python来处理pdf文件,故此分享这个方法
用户9925864
2022/07/27
2.1K0
使用python合并多个pdf文件
多个FeignClient使用相同的name
FeignClient标签默认使用name属性作为bean name,name属性同时为服务名。 如果指定了contextId属性,则使用contextId作为bean name。 如此可为一个服务创建多个FeignClient: @FeignClient(name = "my-service-id", contextId = "my-service-id-api1") public interface Api1FeignClient { } @FeignClient(name = "my-service
路过君
2020/12/17
3.5K0
点击加载更多

相似问题

如何在phpMyAdmin中建立表之间的关系

10

如何在表Axapta之间建立关系

12

如何在MySQL表之间建立关系

116

在表之间建立关系

23

如何在ASP.Net MembershipServices用户和其他表之间建立关系?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文