Domanda

ho iniziato a davvero come C # 's ?? operatore. E sono abbastanza abituato al fatto che dove c'è qualcosa di utile in qualche lingua, è molto probabilmente in Perl troppo.

Tuttavia, non riesco a trovare ?? equivalente in Perl. C'è qualche?

È stato utile?

Soluzione

A partire da 5.10 c'è l'operatore //, che è semanticamente equivalente se si considera il concetto di undef in Perl per essere equivalente alla nozione di null in C #.

Esempio A:

my $a = undef;
my $b = $a // 5;  # $b = 5;

Esempio B:

my $a = 0;
my $b = $a // 5;  # $b = 0;

Altri suggerimenti

Adam dice , Perl 5.10 è l'operatore // che mette alla prova il suo operatore di sinistra per definire-ness al posto della verità:

 use 5.010;

 my $value = $this // $that;

Se si utilizza una versione precedente di Perl, è un po 'confuso. Il || non funziona:

 my $value = $this || $that;

In questo caso, se $this è 0 o una stringa vuota, entrambi i quali sono definiti, si otterrà $that. Per aggirare questo, il linguaggio è quello di utilizzare l'operatore condizionale in modo da poter rendere il proprio controllo:

 my $value = defined( $this ) ? $this : $that;

In realtà, il cortocircuito operatore OR funziona anche quando si valuta undef:

my $b = undef || 5;  # $b = 5;

Tuttavia, fallirà nel valutare 0 ma vero:

my $b = 0 || 5;  # $b = 5;

La domanda implicita qualsiasi numero di argomenti, quindi la risposta implica una subroutine:

Qui si ottiene - restituirà il valore vuoto-string / non prima definito di una lista:

sub coalesce { (grep {length} @_)[0] }

Non che io sappia.

Perl non è davvero un grande utente del concetto nullo. Ha una prova per se una variabile non è definito. Nessun operatore speciale come l'?? però, ma è possibile utilizzare il condizionale:?. operatore con un test di indefinito e ottenere abbastanza vicino

E non vedo nulla nel perl operatore lista sia.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top