Hay dos declaraciones allí. Una declaración "if" y un bare block. Los bloques desnudos son bucles que se ejecutan exactamente una vez.
say "a";
{
say "b";
}
say "c";
# Outputs a b c
Pero ser bucles, que influyen next
, last
y redo
.
my $i = 0;
say "a";
LOOP: { # Purely descriptive (and thus optional) label.
++$i;
say "b";
redo if $i == 1;
say "c";
last if $i == 2;
say "d";
}
say "e";
# Outputs a b b c e
(next
hace lo mismo que last
ya que no hay elemento siguiente.)
Se utilizan por lo general para crear un ámbito léxico.
my $file;
{
local $/;
open(my $fh, '<', $qfn) or die;
$file = <$fh>;
}
# At this point,
# - $fh is cleared,
# - $fh is no longer visible,
# - the file handle is closed, and
# - $/ is restored.
No está claro por qué se utilizó aquí.
Alternativamente, también podría ser un constructor hash.
sub f {
...
if (@errors) {
{ status => 'error', errors => \@errors }
} else {
{ status => 'ok' }
}
}
es la abreviatura de
sub f {
...
if (@errors) {
return { status => 'error', errors => \@errors };
} else {
return { status => 'ok' };
}
}
Perl se asoma en las llaves de adivinar si se trata de un bucle completo o en un constructor de hash. Como no proporcionó el contenido de los aparatos ortopédicos, no podemos decirlo.
No creo que hagan nada. Creo que son equivalentes a agregar otro bloque de código en el bloque if. – gpojd