Ci sono due dichiarazioni lì. Una dichiarazione "se" e uno bare block. I blocchi nudi sono cicli che vengono eseguiti esattamente una volta.
say "a";
{
say "b";
}
say "c";
# Outputs a b c
Ma essendo loop, essi influenzano next
, last
e 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
fa lo stesso last
poiché non v'è alcun elemento successivo.)
Essi sono di solito utilizzati per creare un ambito lessicale.
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.
Non è chiaro il motivo per cui è stato utilizzato qui.
In alternativa, potrebbe anche essere un costruttore di hash.
sub f {
...
if (@errors) {
{ status => 'error', errors => \@errors }
} else {
{ status => 'ok' }
}
}
è l'abbreviazione di
sub f {
...
if (@errors) {
return { status => 'error', errors => \@errors };
} else {
return { status => 'ok' };
}
}
Perl fa capolino nelle parentesi di indovinare se si tratta di un ciclo di nudo o un costruttore di hash. Dato che non hai fornito il contenuto delle parentesi graffe, non possiamo dirlo.
Non credo che facciano nulla. Penso che siano equivalenti ad aggiungere un altro blocco di codice nel blocco if. – gpojd