하나의 매개변수(파일 이름 또는 디렉토리 이름)를 사용하는 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 규칙입니다. 요즘에는 이 경우처럼 앰퍼샌드가 꼭 필요한 경우는 앰퍼샌드를 안전하게 제거할 수 있는 경우가 거의 없습니다.