免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2416 | 回复: 6
打印 上一主题 下一主题

请教子程序传参问题(传文件句柄 和多维列表) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-08-25 10:48 |只看该作者 |倒序浏览
1.传文件句柄

open(OUTFILE, ">filename.txt");
  1. open (OUTFILE, ">filename.txt");
  2. genContent(\*OUTFILE);
  3. close (OUTFILE);

  4. sub genContent(){
  5. my $fh = shift;
  6. printf $fh "this is a test line\n";
  7. }
复制代码
结果返回说printf() on closed filehandle OUTFILE

论坛徽章:
0
2 [报告]
发表于 2012-08-25 10:58 |只看该作者
2,如何传递2个列表到子程序呢? 我用如下方法失败

subprogram(@array1, @array2);

sub subprogram{
my @subarray1=@$_[0];
my @subarray2=@$_[1];

}

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
3 [报告]
发表于 2012-08-25 11:08 |只看该作者
本帖最后由 yinyuemi 于 2012-08-25 11:09 编辑

回复 1# shuxi_w

1.
    sub fun{
sth
}

2. sub fun(\@\@){

}

fun(@arr1,@arr2);

  1. for example:

  2. perl -le '
  3. sub fun(\@\@){
  4. my ($s,$f) = (@_);
  5. use Data::Dumper;
  6. print Dumper $s,$f;
  7. };
  8. @arr1=(1);
  9. @arr2=(2);
  10. fun(@arr1,@arr2)'
复制代码

论坛徽章:
0
4 [报告]
发表于 2012-08-25 11:56 |只看该作者
本帖最后由 shuxi_w 于 2012-08-25 11:58 编辑

回复 3# yinyuemi


    谢谢,不过我的array1是一个二维列表,用你这个方法的话,array2获取的是array1的第二个元素了。

比如 @array1=([1,2,3],[a,b,c],[one,two,three]);
       @array2=(7,8,9);

用你的方法传到子程序里得到的2个列表就成了 (1,2,3) 和 (a,b,c)

是不是需要把多维列表写成 sub(/@@/@)?

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
5 [报告]
发表于 2012-08-25 14:22 |只看该作者
回复 4# shuxi_w


    没明白,你完整的代码是?

   另外一种办法:

sub f{
my ($a1_ref,$a2_ref=(@_);
...
}
f(\@array1,\@array2)  # 传array的引用

论坛徽章:
2
CU大牛徽章
日期:2013-04-17 11:46:28CU大牛徽章
日期:2013-04-17 11:46:39
6 [报告]
发表于 2012-08-25 14:31 |只看该作者
  1. #!/usr/bin/env perl

  2. use strict;
  3. use warnings;

  4. sub genContent {
  5.     my $fh = shift;
  6.     print $fh "this is a test line\n";
  7. }

  8. open $fh, '>', 'filename.txt';
  9. genContent($fh);
  10. close $fh;

  11. #####################################

  12. sub subprogram{
  13.     my ($subarray1, $subarray2) = @_;
  14.     ...
  15. }
  16. subprogram(\@array1, \@array2);
复制代码

论坛徽章:
0
7 [报告]
发表于 2012-08-28 15:45 |只看该作者
     sub test{
          ($a,$b)=@_;
          print @{$$a[0]},"\n" ;
          print @$b, "\n" ;
            }
          my @a=([1,2,3],["a","b","c"]);
          my @b=(4,5,6);
          print @{$a[0]},"\n" ;
          test(\@a,\@b);
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP