데이터 구조에서 문자열을 키로 사용해야하는 경우 %
sigil로 지정된 HASH
내장 유형을 찾고 있습니다. Perl 해시의 멋진 기능 중 하나는 복잡한 데이터 구조를 미리 선언 할 필요가 없다는 것입니다. 당신은 그것을 사용할 수 있고 Perl은 그 사용법으로부터 구조를 추론 할 것입니다.
2011_01 has 1 file
2011_02 has 2 files
은 개별 파일에서 가져 오려면 :
my @file = qw(ipax3_2011_01_27.txt ipax3_2011_02_01.txt ipax3_2011_02_03.txt);
my %ipax3;
for (@file) {
if (/^ipax3_(\d{4}_\d{2})_(\d{2}).txt$/) {
$ipax3{$1}{$2} = $_
}
else {
warn "bad file: $_\n"
}
}
for my $year_month (keys %ipax3) {
my $days = keys %{ $ipax3{$year_month} };
if ($days > 1) {
print "$year_month has $days files\n";
}
else {
print "$year_month has 1 file\n";
}
}
인쇄하는
my $year_month = '2011_02';
my $day = '01';
my $file = $ipax3{$year_month}{$day};
내가 반복하는 목록 모두 같은 keys
함수의 반환 값을 사용 위하고, 일 수. keys
은 목록 컨텍스트에있을 때 모든 키를 반환하고 스칼라 컨텍스트에서 키 수를 반환하기 때문에 가능합니다. 문맥 주위의 코드에 의해 제공된다
마지막 예에서
my $number = keys %ipax3; # number of year_month entries
my @keys = keys %ipax3; # contains ('2011_01', '2011_02')
my @days = keys %{ $ipax{$year_month} };
가 %ipax
각 해시 값에 대한 참조이다. keys
은 문자 해시를 취하므로 $ipax{$year_month}
을 %{ ... }
에 넣어야합니다. perl v5.13.7 +에서는 keys
및 다른 몇 가지 데이터 구조 액세스 함수에 대한 인수를 중심으로 %{ ... }
을 생략 할 수 있습니다.
시도해 보았습니다. 배열 요소에서 패턴 "year_month"를 검색했습니다. $ search = $ year. "_". $ this_month; @match = grep (/ $ search/i, @file); 하지만 이번 달의 파일 만 검색합니다. 내 디렉토리에서 같은 달에 두 개 이상의 항목을 가진 파일을 찾을 무언가가 필요합니다. –