首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在已经传递该哈希的子例程中将散列传递给子例程。

在已经传递该哈希的子例程中将散列传递给子例程。
EN

Stack Overflow用户
提问于 2014-03-18 11:43:00
回答 1查看 68关注 0票数 0

我正在处理将散列传递给各个子程序的方法,我想知道如何将散列传递给子例程,然后将该子例程中的相同哈希传递给不同的子例程,以此类推。

例如,下面的代码工作正常。

代码语言:javascript
运行
AI代码解释
复制
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);
    }     
}   

sub check_tags_again {
    my $hash_now = shift;

    #check again...
    foreach(keys %{$hash_now}){
        print "An element of hash: ", $hash_now->{$_}, "\n";
        #if(defined $hash_now->{$_}){ delete $hash_now->{$_};}
    }
    &check_tags_thrice(\%hash);
}   

sub check_tags_thrice {
    my $hash_now = shift;

    #check again...
    foreach(keys %{$hash_now}){
        print "An element of hash: ", $hash_now->{$_}, "\n";
        #if(defined $hash_now->{$_}){ delete $hash_now->{$_};}
    }   
}   

print "final hash:", %hash, "\n";

但是,当我运行以下代码时:

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

sub process_data {

    my $group_size = 10; 

    my %HoA = ( 
        flintstones => [ "fred",   "barney" ],
        jetsons     => [ "george", "jane", "elroy" ],
        simpsons    => [ "homer",  "marge", "bart" ],
    );      

    &delete_stuff( \%HoA, $group_size );
    print "New group:\n";
    print Dumper( \%HoA );
    undef %HoA;
}   

sub delete_stuff {
    my $HoARef     = shift;
    my $group_size = shift;

    print "group size in sub $group_size\n";

    for ( my $j = 0 ; $j < $group_size ; $j++ ) { 
        my $dlted = &delete_other_stuff( \%HoA, $j );
        print "deleted? '$dlted'\n";

        if ( $dlted == 0 ) { 
            &presence_check( \%HoA, $j );
        }   

        for ( my $i = 0 ; $i < $group_size ; $i++ ) { 
        }   
    }   
}   

sub delete_other_stuff {
    my $HoAref  = shift;
    my $Dex     = shift;
    return $deleted;
}   

sub presence_check {
    my $HoAreF = shift;
    my $DeX    = shift;
}

我得到:

代码语言:javascript
运行
AI代码解释
复制
 Global symbol "%HoA" requires explicit package name at x.pl line 32.
 Global symbol "%HoA" requires explicit package name at x.pl line 35.
 Execution of x.pl aborted due to compilation errors.

我很困惑,因为我认为它在做与第一个相同的事情,但是现在它声称%HoA从来没有初始化过。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-18 12:07:25

delete_stuff中,你没有%HoA,你有$HoARef。如果所有的subs都期望一个对散列的引用,那么您可以只使用它:

代码语言:javascript
运行
AI代码解释
复制
for ( my $j = 0 ; $j < $group_size ; $j++ ) { 
    my $dlted = &delete_other_stuff( $HoARef, $j );
    print "deleted? '$dlted'\n";

    if ( $dlted == 0 ) { 
        &presence_check( $HoARef, $j );
    }
    ...
}

顺便说一句,我们即将结束Perl 5的20年,没有理由用& (Perl4Holdover)来调用带有显式传递参数的sub。

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

https://stackoverflow.com/questions/22489445

复制
相关文章
LeetCode 1893. 检查是否区域内所有整数都被覆盖(差分)
给你一个二维整数数组 ranges 和两个整数 left 和 right 。每个 ranges[i] = [starti, endi] 表示一个从 starti 到 endi 的 闭区间 。
Michael阿明
2021/09/06
4340
JavaScript 检查是否是数字
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/109551.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/05
1.1K0
JS检查是否支持Storage
查看效果:http://hovertree.com/code/html5/q69kvsi6.htm
全栈程序员站长
2022/07/15
3K0
js检查日期是否合法
检查日期是否合法 <script> function CheckDateTime(str) { var reg = /^(\d+)-(\d{1,2})-(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/; var r = str.match(reg); if (r == null) return false; r[2] = r[2] - 1; var d = new Date(r[
江一铭
2022/06/16
6.5K0
js检查是否是数组
该方法兼容Chrome 5, Firefox 4.0, IE 9, Opera 10.5 和 Safari 5,详细兼容性,可以查阅这篇文章。
IT工作者
2022/01/27
3.5K0
python 检查是否存在ddos攻击
import dpkt import socket import optparse
用户5760343
2019/07/31
3.8K0
python 检查是否存在ddos攻击
php-检查网站是否宕机
浏览量 2 <?php $url="http://www.google.com"; $agent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT
kdyonly
2023/03/03
1.7K0
用python实现选择截图区域
一直想用python实现一个类似QQ截图的功能,但不直接截图,而是返回截图的区域,以下是代码
py3study
2020/01/10
3.8K0
是时候检查一下使用索引的姿势是否正确了!
索引,可以有效提高我们的数据库搜索效率,各种数据库优化八股文里都有相关的知识点可背,不过单纯的被条目其实很容易忘记。
江南一点雨
2022/01/24
7610
是时候检查一下使用索引的姿势是否正确了!
Python脚本检查TCP端口是否正常
#!/usr/bin/python import socket import re import sys def check_server(address,port): s = socket.socket() print "Attempting to connect to %s on port %s" % (address,port) try: s.connect((address,port)) print "Connected to %s on port %s" % (address,port) retu
院长技术
2021/02/19
1.7K0
检查评论者是否有Gravatar头像
今天Angel来了,同时为风风找到了一个评论方面的BUG——游客身份若使用的邮箱没有Gravatar头像就不能发评论,这对于一些有特殊需要的朋友来说可能算不上BUG,但却不是我的需求,之后发现是comments-ajax.php文件中的以下代码在起作用:
WindCoder
2018/09/20
9660
Kettle之“检查表是否存在”
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wzy0623/article/details/53884107
用户1148526
2019/05/25
3.9K0
检测系统是否为检查版本(Checked)
<<Windows internals 5th editon>> page 48.
obaby
2023/02/28
2.2K0
检测系统是否为检查版本(Checked)
检查app的activity是否在当前
APP开发中经常会遇到这种需求,需要检查当前的APP是不是可见的,比如,如果是可见的就维持一个socket长连接,如果切到后台不可见了,就断开这个连接。Android本来并不允许APP去监听home键事件,所以我们没发像iOS那样通过监听home键事件来做对应的处理。不过还好Android的Activity的生命周期给我们提供了一种解决这个问题的方法,我们只需要在每个Activity的onStart和onStop中去维持一个计数,如果这个数值大于0,就表示我们的APP还有Activity是在前台运行的,等
xiangzhihong
2018/01/30
1K0
检查Android是否具有摄像头
通常我们进行摄像头操作,如扫描二维码需要判断是否有后置摄像头(Rear camera),比如Nexus 7 一代就没有后置摄像头,这样在尝试使用的时候,我们需要进行判断进行一些提示或者处理。
技术小黑屋
2018/09/04
1.1K0
检查Linux是否被入侵的方法
一、检查系统日志 lastb //检查系统错误登陆日志,统计IP重试次数 二、检查系统用户 1、cat /etc/passwd //查看是否有异常的系统用户 2、grep "0" /etc/passwd //查看是否产生了新用户,UID和GID为0的用户 3、ls -l /etc/passwd //查看passwd的修改时间,判断是否在不知的情况下添加用户 4、awk -F : '$3==0 {print $1}' /etc/passwd //查看是否存在特权用户 5、awk -F : 'length($2
joshua317
2018/04/16
2.2K0
shell脚本 检查文件是否被修改
1.进行检测目录的添加,可以多个目录 2.添加定时任务,可以一分钟一次,有改动会输出改动情况 #!/bin/bash #2020-3-14 #监测文件是否被修改脚本 #监测目录 dir_file=(/etc) file_list=/usr/local/file_list.txt error_file=/usr/local/error_list.txt display_path() { for i in `ls` do if [[ -d $i ]];then             cd $i    
陈不成i
2021/06/23
2.3K0
RedHat 8 如何检查端口是否联通
其中可能有各种原因导致端口没有联通,通常为操作系统本身的防火墙,托管服务器中心的防火墙等。
HoneyMoose
2021/09/04
2.3K0
RedHat 8 如何检查端口是否联通
检查原生 JavaScript 函数是否被覆盖
原文链接:https://mmazzarolo.com/blog/2022-07-30-checking-if-a-javascript-native-function-was-monkey-patched/[1]
chuckQu
2022/09/20
6430
检查原生 JavaScript 函数是否被覆盖
点击加载更多

相似问题

使用特权帐户重置AD用户帐户密码

10

在Meteor帐户中重置密码后禁用登录-密码

120

用户在更改密码后将被注销。

11

编辑用户的帐户详细信息

79

Django:帐户创建后密码重置的无效令牌

216
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档