Perl이 스크립트와 혼동됨

Perl이 스크립트와 혼동됨

하나의 매개변수(파일 이름 또는 디렉토리 이름)를 사용하는 Perl 스크립트를 작성하십시오. 스크립트는 stat 함수를 호출하고 각 필드에 대한 한 줄 설명과 함께 결과 데이터를 인쇄해야 합니다.

my $args;
$args=@ARGV;

if ($args<1)
{
    die("Expecting a filename");
}

sub showstat
{
      print " $_[0] dev, device number of filesystem\n";
      print " $_[1] ino,      inode number\n";
      print " $_[2] mode,     file mode  (type and permissions)\n";
      print " $_[3] nlink,    number of (hard) links to the file\n";
}

my $filename=$ARGV[0];
if (open (TESTFILE,$filename))
{
    my @filedata= stat(TESTFILE);

    &showstat(@filedata);
    close (TESTFILE);
}
else
{
    print "error on open $filename";
}

내 질문은 만약 에 가 대신 에 같으면 $args=@ARGV안 된다는 것 입니다 . 왜 안 돼?$ARGV[0]$args[0]$filename=$ARGV[0]

@showstat(@filedata)아래에 앰퍼샌드를 넣는 이유는 무엇 입니까 ? (정의상 서브루틴이라는 것을 알고 있습니다.) 그러나 여기서 실제 함수가 무엇을 하는지 명확히 할 수 있습니까?

답변1

Perl은 상황에 민감합니다. 스칼라 변수에 할당된 경우

$args = @ARGV

오른쪽 값은 스칼라 컨텍스트에서 평가됩니다. 즉, 배열이 해당 크기를 반환합니다.

서브루틴 호출에 & 기호를 사용하는 것은 Perl 4 규칙입니다. 요즘에는 이 경우처럼 앰퍼샌드가 꼭 필요한 경우는 앰퍼샌드를 안전하게 제거할 수 있는 경우가 거의 없습니다.

관련 정보