Funzione chomp()
in Perl
Nel linguaggio di programmazione Perl ci sono built-in funzione di chomp()
.
Questa funzione viene utilizzata quando si lavora con le stringhe.
Nel caso più semplice, la funzione chomp()
rimuove l'ultima
simbolo \n
a ca
che è trasmessa argomento a questa funzione.
▶ Run
#!/usr/bin/perl
my $string = "ASDF\n";
chomp($string);
print "'$string'";
Questo programma visualizzerà il testo 'ASDF'
.
- Nel caso in cui il valore di una variabile non finisce a
\n
, il valore non cambia
- Nel caso in cui l'variabile che contiene più di un simbolo
\n
alla fine, viene rimosso solo un simbolo \n
Argomenti
Nel caso in cui la funzione chomp
non trasmessi gli argomenti, la funzione lavora con di default della variabile $_
:
▶ Run
#!/usr/bin/perl
$_ = "123\n";
chomp;
print "'$_'";
Nel caso in cui in una variabile $_
si trova undef
e viene utilizzato use warnings;
, ci sarà un avvertimento:
▶ Run
#!/usr/bin/perl
use strict;
use warnings;
chomp;
Use of uninitialized value $_ in scalar chomp at script.pl line 6.
In funzione chomp()
è possibile trasferire scalari, array, hash. In caso di hash
la funzione funziona solo con i valori delle chiavi, le chiavi non cambieranno.
L'argomento della funzione chomp()
deve essere sempre variabile. Nel caso in cui
provare a passare a questa funzione una stringa, allora sarà un errore e l'esecuzione del programma
sarà interrotta:
▶ Run
#!/usr/bin/perl
chomp("ASDF\n"); # Error!
Can't modify constant item in chomp at script.pl line 3, near ""ASDF\n")"
Execution of script.pl aborted due to compilation errors.
Il valore restituito
Funzione chomp()
restituisce sempre un numero intero maggiore o uguale a 0
.
Se la funzione restituisce 0
, questo significa che la sostituzione non è stato.
Il numero più 0
indica quanti sono stati cambiamenti.
Ecco un esempio di una situazione in cui la funzione chomp()
restituisce il numero di 2
:
▶ Run
#!/usr/bin/perl
my @arr = ("ASDF\n", "QWERTY\n");
print chomp(@arr);
Ecco un esempio di utilizzo del valore restituito per eseguire diversi
il codice, nel caso se è stata la sostituzione o la sostituzione non è stato:
▶ Run
#!/usr/bin/perl
use feature qw(say);
my $string = "ASDF\n";
if (chomp($string)) {
say 'Removed \n';
} else {
say 'String is unchanged';
}
print "'$string'";
Variabile $/
Funzione chomp()
rimuove con il simbolo di fine riga che contiene globale
variabile $/
.
Per impostazione predefinita, in questa variabile contiene il simbolo \n
. Ma è possibile inserire in questo
una variabile di un altro personaggio e poi la funzione chomp()
sarà cancellare.
Ecco un esempio:
▶ Run
#!/usr/bin/perl
$/ = "F";
my $string = "ASDF";
chomp($string);
print "'$string'";
Il programma visualizzerà il testo 'ASD'
.
Nel caso in cui la variabile è una stringa vuota ($/ = '';
),
quello chomp()
rimuoverà non un carattere di fine \n
, e tutti i personaggi \n
alla fine della riga.
L'uso standard
Molto spesso la funzione chomp()
viene utilizzato per leggere riga per riga
da un file. Per il trattamento delle stringhe da un file spesso conveniente per in queste righe non
era il simbolo \n
alla fine della riga:
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use open qw(:std :utf8);
my $file_name = 'a.csv';
open FILE, '<', $file_name or die $!;
while my $line (<FILE>) {
chomp($line);
print "Parsing line $line";
}
Rimuovere tutti i simboli \n
alla fine della riga
Di solito la funzione chomp()
rimuove solo un simbolo \n
alla fine della riga:
▶ Run
#!/usr/bin/perl
my $string = "Line1\nLine2\n\n\n";
chomp($string);
print "'$string'";
Ci sono diversi modi come è possibile eliminare tutti i caratteri \n
alla fine della riga.
Ecco un esempio di utilizzo di un'espressione regolare:
▶ Run
#!/usr/bin/perl
my $string = "Line1\nLine2\n\n\n";
$string =~ s/\n*$//;
print "'$string'";
Un altro modo per rimuovere tutti gli spazi finali — è quello di impostare il valore
variabile $/
in una stringa vuota:
▶ Run
#!/usr/bin/perl
$/ = '';
my $string = "Line1\nLine2\n\n\n";
chomp($string);
print "'$string'";
L'uso di un'espressione regolare è spesso meglio: è chiaro e non cambia
una variabile globale che può influire sul funzionamento del codice in altri
parti del programma.
La documentazione ufficiale di
Ecco l'output del comando perldoc -f chomp
:
chomp VARIABLE
chomp( LIST )
chomp This safer version of "chop" removes any trailing string that
corresponds to the current value of $/ (also known as
$INPUT_RECORD_SEPARATOR in the "English" module). It returns
the total number of characters removed from all its arguments.
It's often used to remove the newline from the end of an input
record when you're worried that the final record may be missing
its newline. When in paragraph mode ("$/ = """), it removes
all trailing newlines from the string. When in slurp mode ("$/
= undef") or fixed-length record mode ($/ is a reference to an
integer or the like; see perlvar) chomp() won't remove
anything. If VARIABLE is omitted, it chomps $_. Example:
while (<>) {
chomp; # avoid \n on last field
@array = split(/:/);
# ...
}
If VARIABLE is a hash, it chomps the hash's values, but not its
keys.
You can actually chomp anything that's an lvalue, including an
assignment:
chomp($cwd = `pwd`);
chomp($answer = );
If you chomp a list, each element is chomped, and the total
number of characters removed is returned.
Note that parentheses are necessary when you're chomping
anything that is not a simple variable. This is because "chomp
$cwd = `pwd`;" is interpreted as "(chomp $cwd) = `pwd`;",
rather than as "chomp( $cwd = `pwd` )" which you might expect.
Similarly, "chomp $a, $b" is interpreted as "chomp($a), $b"
rather than as "chomp($a, $b)".
Altri articoli
Some parts of this page were machine translated.
Powered by Yandex.Translate
http://translate.yandex.com/