Pregunta ¿Hay un equivalente de Perl al operador nulo coalescente (??) en C #?


Empecé a gustarme mucho C # 's ?? operador. Y estoy bastante acostumbrado al hecho de que cuando hay algo útil en algún idioma, es muy probable que también esté en Perl.

Sin embargo, no puedo encontrar? equivalente en Perl. ¿Hay alguna?


13
2017-12-12 01:47


origen


Respuestas:


A partir del 5.10 está el // operador, que es semánticamente equivalente si se tiene en cuenta el concepto de undef en Perl para ser equivalente al concepto de null Cª#.

Ejemplo A:

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

Ejemplo B:

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

30
2017-12-12 02:04



Como Adam dice, Perl 5.10 tiene el // operador que prueba su operador de la izquierda para la definición en lugar de la verdad:

 use 5.010;

 my $value = $this // $that;

Si está utilizando una versión anterior de Perl, es un poco complicado. los || no funcionará

 my $value = $this || $that;

En ese caso, si $this es 0 o la cadena vacía, ambas definidas, obtendrás $that. Para evitar eso, la expresión idiomática es usar el operador condicional para que pueda hacer su propio control:

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

6
2017-09-25 18:57



En realidad, el operador O de cortocircuito también funcionará cuando se evalúe undef:

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

Sin embargo, fallará al evaluar 0 pero es cierto:

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

2
2017-12-14 08:23



La pregunta implicaba una cantidad de argumentos, por lo que la respuesta implica una subrutina:

Aquí lo obtiene: devolverá el primer valor de cadena definido / no vacío de una lista:

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

0
2018-01-25 15:25



No que yo sepa.

Perl no es realmente un gran usuario del concepto nulo. Tiene una prueba para determinar si una variable no está definida. ¿Ningún operador especial como el? sin embargo, pero puede usar el operador condicional?: con una prueba undef y acercarse bastante.

Y no veo nada en el perl lista de operadores ya sea.


-4
2017-12-12 01:50