请教:子程序调用时如何传递文件句柄???

请教:子程序调用时如何传递文件句柄???



[Copy to clipboard] [ - ]
CODE:
sub process()
{
        print(<FILE>);
}

open(FILE, "/etc/passwd");
&process();
close(FILE);

这个程序输出了/etc/passwd文件的内容,我有j几个问题:
  • open创建了一个全局变量,请问如何让open创建了一个局部变量?
  • 如何把文件句柄传递给子程序?
  • 在子程序中如何以参数的方式引用文件句柄?


希望能够实现如下功能:

[Copy to clipboard] [ - ]
CODE:
#include <stdio.h>

void process(FILE * file)
{
    现在可以调用fread、fwrite函数对file操作
}

int main()
{
    FILE * file;

    file = fopen("/etc/passwd", "r");
    process(file);
    fclose(file);
}



[Copy to clipboard] [ - ]
CODE:
open my $fh, "</path/to/foo" or die;
process( $fh );
close( $fh );

sub process {
    my $fh = shift;
    my $line = <$fh>;
    print $line, "\n";
    read $fh, my $buffer, 1024;
    print $buffer, "\n";
}

懂了,应该使用$file的形式而不是光秃秃的FILE打开文件,这样就统一了,谢谢!

为什么书上都是使用open(FILE, "/etc/passwd")形式打开的?


QUOTE:
原帖由 DennisRitchie 于 2007-8-23 19:02 发表

为什么书上都是使用open(FILE, "/etc/passwd")形式打开的?

那样也可以:

[Copy to clipboard] [ - ]
CODE:
open FH, "</path/to/foo" or die;
process( *FH );
close FH;

sub process {
    local *FH = shift;

    my $line = <FH>;
    print "$line\n";
}

很好,谢谢flw,这个论坛上好多人回答问题都是答飞所问。

哎,我发现好的perl教程真少,常见而又重要的问题都不提。另外,也不知道中国怎么有那么多的小网站的?每个网站都千篇一律的转载一些质量奇差的烂文章、烂教程。

flw有空你去写本关于perl的书吧,我支持你。
to 楼上的:
你太浮躁了。
我不信你仔仔细细看完小骆驼大骆驼还会问出这样的问题。


QUOTE:
原帖由 flw 于 2007-8-23 19:28 发表
to 楼上的:
你太浮躁了。
我不信你仔仔细细看完小骆驼大骆驼还会问出这样的问题。

什么是大小骆驼?


QUOTE:
原帖由 DennisRitchie 于 2007-8-23 19:40 发表

什么是大小骆驼?

这个便是小骆驼。
http://bbs.chinaunix.net/viewthr ... p%3Bfilter%3Ddigest
大骆驼稍后再看吧。
先把这个看完。
Perl语言入门 (Learning Perl)---小骆驼,因为书皮是个小骆驼
http://www.douban.com/subject/2030712/

Perl语言编程 (Programming Perl) -- 大骆驼,因为书皮是个骆驼:)
http://www.douban.com/subject/1231697/


QUOTE:
原帖由 flw 于 2007-8-23 19:43 发表

这个便是小骆驼。
http://bbs.chinaunix.net/viewthr ... p%3Bfilter%3Ddigest
大骆驼稍后再看吧。
先把这个看完。

粗粗浏览一下,看上去像本不错的好书,但没有面向对象的内容。