perl 读取文件的几个问题

perl 读取文件的几个问题

1、我想把路径作为参数,但是却获取不到,我的代码是这样的

sub test {
         print $ARGV[0];
         my $dir = $_[0];  //两种方式都输出的是空串
}

test(<>);
2、我打开一个目录句柄,然后遍历其下的文件,在依次打开,可是这个时候文件不再带有路径名,虽然我可以拼接上,但是总觉得怪怪的,为什么遍历了目录,就不能自然的open呢,我的代码或许不正确,请大家指正
open DH, $dir or die "bla bla bla";
for (readdir DH) {
            open RFC, "<", $_ or die "bla bla bla";
            ........
            close RFC;
}
closedir DH;

3、我想获取某个特定行的内容,这个行没有特定的模式,但是上下若干行有,就是RFC文档的标题, 上面一行是以年份结尾的,下面一行是固定的一行"the state of the memo"
我想取这个标题,只能匹配这两个中的任一个,但是之后该怎么移行,
@files = <RFC>或许可以按行匹配,但是好象有些麻烦,
如果$files = <RFC>全部读入一个字串的话,就是这样的 xxx\n...\n2003\n\n\nxxxx\n,不知道该怎么在匹配完年份之后,再继续走到下两行
while(<RFC>){}同样是这样的问题,我无法确定的读到之后的若干行就让循环停止
4、问题4也类似于3,怎么确定的读取某些行的内容,
5、问题拓展一下,怎么确定地读取某些行的前后若干行的内容
6、再拓展一下,perl里有没有类似于tail和head的函数或者模块

没见过head, tail函数。

[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/perl -w

use warnings;
use strict;

sub head {
    my $ln = shift || 10;

#uncomment below sentence for reading stdin
#@_ = qw(-) if !(@_);

    for my $file (@_) {
        print "==> $file <==\n" if @_ > 1;

        open FH, "$file" or die "$file:$!";
        while (<FH>) {
            last if $. > $ln;
            print;
        }
        close FH;
    }
}

sub tail {
    my $ln = shift || 10;

#uncomment below sentence for reading stdin
#    @_ = qw(-) if !(@_);

    for my $file (@_) {
        print "==> $file <==\n" if @_ > 1;

        my @lines = ();

        open FH, "$file" or die "$file:$!";
        while (<FH>) {
            push @lines, $_;
            shift @lines if $. > $ln;
        }
        close FH;

        print @lines;
    }
}

my $h = 20;
my $t = 5;

print "Get head $h lines of @ARGV\n";
head($h, @ARGV);

print "\nGet tail $t lines of @ARGV\n";
tail($t, @ARGV);

谢谢,
不过没看懂shift || 10,为什么不是$_[0]
因为要把它从@_中取出来,剩下的是文件名