2013-05-06 29 views
5

Tôi đang cố ghi vào một số giá trị được lấy từ một mảng. Nhưng tôi đang gặp một số lỗi '' Không thể sử dụng một biến không xác định như một tài liệu tham khảo biểu tượng ở ... dòng 81:không thể sử dụng giá trị không xác định làm biểu tượng perl

foreach $k (sort keys %{$value2}){ 
    print $value4 $k." = ".%{$value2{$k}}. $value3; 



sub printit{ 
    $value1 = $_[0];#"ipadress" is a string 
    $value2 = $_[1];#%hash2 
    $value3 = $_[3];#"paquet" is a string 
    $value4 = $_[4];#SOURCE is the file name 

    foreach $k (sort keys %{$value2}){ 
    print $value4 $k." = ".%{$value2{$k}}. $value3; 
    if (%{$value2{$k}} >= 2) { print $value4 "s";} 
    print $value4 "\n"; 
    } 
} 

printit('ipadress', \%hash2, ' paquet'. SOURCE); 

Ai đó có thể xin cho biết tôi có chuyện gì vậy?

những thứ là mã của tôi là mã này và nó hoạt động tốt. Và tôi đã không lúng túng SOURCE và nó vẫn hoạt động tốt.

print SOURCE "Ipadress #2\n\n"; 
foreach $k (sort keys %hash2){ 
    print SOURCE $k." = ".$hash2{$k}." paquet"; 
    if ($hash2{$k} >= 2) { print SOURCE "s";} 
    print SOURCE "\n"; 
} 

nhưng tôi có nhiều mã cũng làm như vậy nên tôi muốn tạo một hàm để có thể giảm số dòng.

Trả lời

3

bạn quên một dấu phẩy hoặc nối ở đây:

print $value4 $k." = ".%{$value2{$k}}. $value3; 

Perl nghĩ bạn muốn sử dụng $value4 có filehandle (biểu tượng), và dường như $value4 là undefined. Lý do nó là undefined là bởi vì bạn gán cho nó giá trị của $_[4] nhưng có thể bạn muốn $_[3]

Dường như bạn có ý định $value4 trở thành một tập tin tên cho đầu ra của bạn (vì mảng được zero-lập chỉ mục.); nếu đó là trường hợp thì bạn cần phải thực sự mở tập tin đó để có được một filehandle:

open my $fh, '>', $value4 or die "Could not open file $value4: $!"; 
... 
print { $fh } $k." = ".%{$value2{$k}}. $value3; 

Vì vậy, bạn có ba điều cần khắc phục:

  1. Hình hiểu tại sao $value4 là undefined và khắc phục điều đó. (Khi bạn thấy mình thêm số vào tên vô hướng, có thể bạn có thể muốn sử dụng một mảng. Bạn chỉ có thể sử dụng @_ trực tiếp hoặc lấy các giá trị vào một mảng @args thay vì một loạt các vô hướng.)

  2. Tìm hiểu cách bạn muốn định dạng chuỗi đầu ra của mình và sử dụng tệp tập tin, không phải tên tệp, cho print.

  3. Tìm hiểu cách bạn muốn tuần tự hóa băm được tham chiếu bởi $value2{$k}, vì việc in băm trong ngữ cảnh vô hướng gần như chắc chắn không phải là những gì bạn muốn làm.

(gợi ý cập nhật sau khi tôi nhận ra bạn đang thiếu một filehandle)

Các vấn đề liên quan