2015-03-22 7 views
5
Warnung

Ich habe den Code:Drücken auf eine dereferenzierte Array gibt

push @$args{"ARRAY"}, "value"; 

Dies gibt Warnung sagen:

push on reference is experimental at ... 

Wenn ich nur Block verwenden um das Array:

push @{args{"ARRAY"}}, "value"; 

Dann verschwindet die Warnung. Warum passiert dies?

Antwort

8

@$args{"ARRAY"} entspricht @{$args}{"ARRAY"}, nicht @{$args{"ARRAY"}}. Von perlref, section "Using References":

die curlies für den einfachen Fall von $$x, weil der Lage zu sein Menschen machen den Fehler, gerade die dereferencing Symbole als richtigen Operatoren und wundern sich über ihre Vorrang oft wegzulassen. Wenn sie jedoch wären, könnten Sie Klammern anstelle von geschweiften Klammern verwenden. Das ist nicht der Fall . Betrachten Sie den Unterschied unten; 0 Fall ist eine kurze Hand-Version von Fall 1, nicht 2 Fall:

$$hashref{"KEY"} = "VALUE";  # CASE 0 
    ${$hashref}{"KEY"} = "VALUE";  # CASE 1 
    ${$hashref{"KEY"}} = "VALUE";  # CASE 2 
    ${$hashref->{"KEY"}} = "VALUE";  # CASE 3 
Verwandte Themen