language/perl

[perl] 문법의 오묘함 ^^

alignG 2009. 10. 8. 11:05

아래는 어떤 모듈의 디스크를 가져오는 부분의 일부분을 가져다 조금 뜯어 고친겁니다
굴은 글씨로 칠한부분 처음엔 이해 안갓는데 차근 차근 집어보니 2차원 해쉬더군요 문법 공부의 부족함을 요즘 많이 느끼고 있습니다. 저런식으로도 해쉬를 사용할수 있다는걸 알았으니 앞으로 저코드를 응용할일이 많을 듯싶네요.

    my ($self) = @_;
    my $disktotal=0;
    my $diskfree=0;
    my $df_cmd =  "df -kP";
    local $ENV{PATH} =  "/bin";
    my (%disk_usage, $disk_name);
    open my $fh, "$df_cmd|" or croak " unable to execute '$df_cmd' ($!)";
    {my $null = <$fh>;}
    while (my $line = <$fh>) {
        next unless $line =~ /^(.+?)\s+(.+)$/ && !$disk_name;

        @{$disk_usage{$1}}{qw(
            total
            usage
            free
            usageper
            mountpoint
            )} = (split /\s+/, $2)[0..4];
        if($disk_usage{$1}{mountpoint} !~ /(dev|lib|run|var)/)
        {
            $diskfree = $diskfree + $disk_usage{$1}{free};
            $disktotal = $disktotal + $disk_usage{$1}{total};
        }
    }
    close($fh);
    return "disktotal=" . $disktotal . "\ndiskfree=" . $diskfree . "\n";

@{$disk_usage{$1}}에 대해서 {}로 해쉬값을 주어서 2차원해쉬로 만들었네요 @{}은 아직 정확한 이해가 부족합니다. 인터넷 검색중 ^^
반응형