2013-06-05 3 views
4

사용자 입력을 통해 결정된대로 경로 이름/파일을 가져 와서 삭제하는 스크립트가 있습니다. 각 디렉토리를 개별적으로 나열하고 각 디렉토리에서 이전 파일 삭제에 대한 확인을 요청합니다.다차원 배열을 통한 Perl Foreach?

그래서, 문자열 (전체 경로 이름)을 보유하는 여러 배열 (각 디렉토리)을 보유하는 배열 (@oldDirs)이 있습니다.

@oldDirs = (@AirDefense,@Arcsight,@Avocent,@BlueCoat,@Checkpoint,@Cisco,@Crossbeam,@FireE ye,@lostAndFound,@rancid,@Riverbed,@Symantec,@Wiki,@WLAN) 

if($oldPathsSize != 0) 
{ 
    my $dirNamesCounter = 0; 
    my @dirNames =  ('/AirDefense','/Arcsight','/Avocent','/BlueCoat','/Checkpoint','/Cisco','Crossbeam','FireE ye','/lost+found','/rancid-2.3.8','/Riverbed','/Symantec','/Wiki','/WLAN'); 
    foreach my @direc (@oldDirs) 
    { 
     my $size = @direc; 
     print "Confirm Deletion of $size Old files in $dirNames[$dirNamesC]: \n"; 
     $dirNamesCounter++; 

     foreach my $pathname (@direc) 
     { 
      print "\t$pathname\n"; 
     } 

     print "\nDelete All?(y/n): "; 
     my $delete = <STDIN>; 
     chomp($delete); 

     if($delete eq "y") 
     { 
      #delete file 
     } 
    } 
} 

내 문제는 첫 번째 foreach 문을 사용하는 것입니다. 둘 다 배열이고 @direc는 허용되지 않습니다. foreach의 해당 부분에 스칼라 값이 있어야하기 때문입니다. 그러나 그들은 모두 배열입니다! 가능하다면 어떻게해야합니까?

답변

14

perllol - Manipulating Arrays of Arrays in Perl을 읽어야합니다. 이 같은 다차원 배열을 만들 수 없습니다 :

my @array1 = (1, 2, 3); 
my @array2 = qw/a b c/; 
my @multi = (@array1, @array2); 

대신, 배열은 평평하게되고 @multi 당신은 참조를 사용할 필요가

1, 2, 3, 'a', 'b', 'c' 

가 포함됩니다

my @multi = (\@array1, \@array2); 
for my $ref (@multi) { 
    for my $inner (@$ref) { 
     # ... 
    } 
} 
+0

Ohhhhhhh, 참조 . 장난! 좋아, 답장과 링크에 대해 감사드립니다. – geeoph

+3

\는 분배 형이므로이 함수는 작동합니다 :'my @multi = \ (@ array1, @ array2);' – ysth

+0

grate, 고맙습니다. – Jerry

관련 문제