2012-01-18 13 views
17

Eventuali duplicati:
When should I use the & to call a Perl subroutine?Differenza tra & la funzione e la funzione() in Perl

In script Perl, perché è che il metodo di invocare la funzione è scritto in modo diverso alcune volte. Vedo la funzione & e talvolta la funzione(). Sono entrambi uguali e questo è solo uno stile che uno vorrebbe sfoggiare? Se sono uguali, perché sono entrambi disponibili, non basterebbe uno? Immagino che ci sia una differenza semantica tra i due metodi che li distinguono l'uno dall'altro ... ma in che tipo di circostanze?

--- Poiché non riesco a rispondere alla mia domanda per motivi di timeout, sto aggiornando la risposta nella sezione della domanda stessa. Quando avrò la possibilità di aggiornare il blocco delle risposte, lo inserirò lì.

Ho trovato il testo pertinente nel libro 'Learning Perl'..grazie per il suggerimento però. Capitolo 4: Subroutine: omissione della e commerciale.

Sono stato più interessato alla e commerciale & utilizzo per le funzioni perl. Se una subroutine è già definita prima di essere invocata, la subroutine può essere invocata senza utilizzare & mentre si chiama la funzione in modo simile al richiamo delle funzioni integrate. & viene anche utilizzato per distinguere tra le funzioni incorporate e le funzioni definite dall'utente se la funzione da richiamare utilizza lo stesso nome di una funzione incorporata, purché sia ​​definita prima di essere invocata.

L'uso di(), è solo per giustificare il passaggio degli argomenti alle subroutine, mentre se non viene utilizzato, l'elenco predefinito di argomenti correnti viene passato nel modulo @_. Se gli argomenti sono specificati in() per una subroutine, si presume che sia una subroutine e viene invocato anche se non è stato precedentemente definito durante l'analisi.

+11

Vedere [Qual è la differenza tra chiamare una funzione come & foo e foo()?] (Http://perldoc.perl.org/perlfaq7.html#What%27s-the-difference-tra between-calling-a-function -as-% 26foo-and-foo% 28% 29% 3F) in Perl FAQ 7. – manatwork

+0

hi @manatwork, che spiega la differenza tra & foo e & foo(), ma perché l'e commerciale viene usato del tutto se non necessario ... quando è necessario? –

+0

Nella sezione Descrizione [perlsub] (http://perldoc.perl.org/perlsub.html) enumera quando è '&' opzionale. – manatwork

risposta

4

come detto da @manatwork e @KeithThompson si possono trovare informazioni in questi articoli:

  1. Una descrizione generale - What's the difference between calling a function as &foo and foo()?
  2. informazioni Sottile sull'utilizzo & o no per una chiamata di funzione - perlsub: Perl Subroutines: Description.
+0

Nel caso ti stia chiedendo del mio one-char. edit: la tua risposta _rendered_ con un URL codificato in modo errato (anche se era corretto nell'origine Markdown), che ha causato l'ancoraggio della parte "Qual è la differenza ..." per non funzionare correttamente (uno è atterrato nella parte superiore di la lunga pagina di destinazione invece che all'ancora di interesse). Sospetto che si trattasse di un bug di rendering _historical_ Markdown che è stato fissato per _nove_ risposte. Costringendo la tua risposta a essere nuovamente salvata, il problema è andato via. – mklement0

18

ha usi molto specifici:

  • & dice Perl ad ignorare il prototipo del sottomarino.
  • & consente di utilizzare il numero di telefono del chiamante @_. (&foo; senza paren o argomenti).
  • goto &foo; e defined &foo.
  • Ottenere un riferimento (ad esempio \&foo).

Alcune persone (principalmente principianti) lo usano per distinguere i sottotitoli dell'utente dalle funzioni incorporate, poiché le funzioni incorporate non possono essere precedute da &.

+0

Quale altro modo c'è per distinguere i sottotitoli utente dai builtin? – jackthehipster

+2

@jackthehipster, Convenzioni di denominazione, anche se io ne dubito. A chi importa chi l'ha scritto. È importante che 'utf8 :: encode' sia un builtin e che' Encode :: encode_utf8' non lo sia? – ikegami

Problemi correlati