2012-11-15 11 views
5

Esiste un equivalente alla funzione $_ di Perl? Sto riscrivendo alcuni vecchi script perl in C# e non ho mai imparato alcun perl. Ecco un esempio di quello che sto cercando di capire

sub copyText { 
     while($_[0]){ 
      $_[1]->Empty(); 
      $_[0] = $_[1]->IsText(); 
      sleep(1); 
     } 
+0

Per quelli di noi che conoscono C#, ma non perl, puoi dirci cosa '$ _' fa? O forse spiega cosa stai cercando di fare. Effettuare una conversione rigorosa da una lingua all'altra potrebbe non avere il miglior risultato. Può essere come chiedere come usare una vite con un martello. – cadrell0

+3

@ cadrell0, '$ _' non è utilizzato in quanto sopra. '$ _ [0]' e '$ _ [1]' sono il primo e il secondo elemento dell'array '@ _'. '@ _' è la lista degli argomenti passati al sub. Gli elementi di '@ _' sono alias rispetto agli argomenti attuali (passa per ref) piuttosto che essere copie (passa per valore). – ikegami

+0

@ikegami Ecco perché non uso perl :). '$ _ [0]' fa riferimento all'array '@ _'? O il codice OP è sbagliato? – cadrell0

risposta

11

Prima di tutto, $_ non è una funzione. È solo una variabile ordinaria (che sembra essere letta e modificata da un sacco di builtin).

In secondo luogo, il codice che hai pubblicato non utilizza $_. Sta accedendo agli elementi di @_, l'elenco dei parametri.

Una versione più più leggibile del codice che hai postato potrebbe essere:

sub copyText { 
    my ($arg1, $arg2) = @_; 
    while ($arg1) { 
     $arg2->Empty(); 
     $arg1 = $arg2->IsText(); 
     sleep(1); 
    } 

    $_[0] = $arg1; # arg1 is passed by reference 
} 
  • arg1 è un valore booleano passato per riferimento.
  • arg2 è un tipo di oggetto con un metodo denominato Empty e uno denominato IsText.

Spiacente, non so C#, ma si spera che si possa andare avanti con questo.

+0

grazie questo mi ha aiutato molto! – pyCthon

+1

'$ arg1' potrebbe non essere un booleano. Qualsiasi valore restituisce true o false in Perl. Sto indovinando sulla base del nome 'IsText' e dal momento che è usato solo come booleano. – ikegami

+0

sì è un vecchio raschietto delle news quindi immagino sia stato un assegno per vedere se ha rilevato qualcosa di sbagliato – pyCthon

0

funzione di Perl $_

non è una funzione. È un pronome che significa "esso".

C'è un'altra variabile speciale @_, che è un pronome che significa "loro".

Non c'è nessun analogo in C#.

+0

corrispondentemente $ _ [0] significa il loro 0 ° indice. scalare (@_) restituisce il conteggio di essi, ecc. – singingfish