Fungsi chomp() di Perl

Dalam bahasa pemrograman Perl memiliki fungsi built-in chomp(). Anda dapat menggunakan fungsi ini ketika bekerja dengan string. Dalam kasus yang paling sederhana, fungsi chomp() menghilangkan terakhir simbol \nAC yang berlalu argumen dalam fungsi.

Berikut ini sebuah contoh:

▶ Run
#!/usr/bin/perl

my $string = "ASDF\n";

chomp($string);

print "'$string'";

Program ini menampilkan teks 'ASDF'.

  • Jika nilai dari variabel tidak berakhir dengan \n, nilai tidak akan berubah
  • Jika sebuah variabel yang berisi lebih dari satu karakter \n di akhir, itu akan dihapus hanya karakter \n

Argumen

Jika fungsi chomp tidak lulus argumen, fungsi bekerja dengan default variabel $_:

▶ Run
#!/usr/bin/perl

$_ = "123\n";

chomp;

print "'$_'";

Dalam hal ini jika variabel $_ adalah undef dan digunakan use warnings;, akan peringatan:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

chomp;
Use of uninitialized value $_ in scalar chomp at script.pl line 6.

Dalam fungsi chomp() , anda dapat melewati skalar, array, hash. Dalam kasus hash fitur ini hanya akan bekerja dengan nilai-nilai kunci, kunci sendiri tidak akan berubah.

Argumen dari fungsi chomp() harus selalu variabel. Jika untuk mencoba untuk melewati ini fungsi string, itu akan kesalahan dan eksekusi program akan dihentikan:

▶ 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.

Nilai kembali

Fungsi chomp() selalu mengembalikan sebuah integer yang lebih besar dari atau sama dengan 0. Jika kembali fungsi 0, ini berarti bahwa tidak ada penggantian. Jumlah yang lebih 0 berarti seberapa banyak perubahan yang terjadi.

Berikut ini adalah contoh situasi ketika fungsi chomp() kembali jumlah 2:

▶ Run
#!/usr/bin/perl

my @arr = ("ASDF\n", "QWERTY\n");
print chomp(@arr);

Berikut adalah contoh menggunakan nilai balik untuk memenuhi berbagai kode jika ada substitusi atau pengganti tidak:

▶ 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'";

Variabel $/

Fungsi chomp() menghilangkan end of line simbol yang terkandung dalam global variabel $/. Secara default, variabel ini berisi simbol \n. Tapi anda dapat posting ini variabel dari beberapa simbol lain dan kemudian fungsi chomp() akan menghapusnya. Berikut ini sebuah contoh:

▶ Run
#!/usr/bin/perl

$/ = "F";

my $string = "ASDF";

chomp($string);

print "'$string'";

Program ini akan menampilkan teks 'ASD'.

Dalam hal ini jika variabel string kosong ($/ = '';), kemudian chomp() akan menghapus satu trailing \n, dan semua karakter \n di akhir baris.

Standar penggunaan

Sangat sering merupakan fungsi dari chomp() ini digunakan untuk membaca baris demi baris dari file. Untuk pengolahan string dari file ini sering nyaman untuk di garis-garis ini tidak itu adalah simbol \n di akhir baris:

#!/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";
}

Untuk menghapus semua karakter \n pada akhir baris

Biasanya fungsi dari chomp() hanya menghapus satu karakter \n di akhir baris:

▶ Run
#!/usr/bin/perl

my $string = "Line1\nLine2\n\n\n";

chomp($string);

print "'$string'";

Hasilnya:

'Line1
Line2

'

Ada beberapa cara bagaimana anda dapat menghapus semua simbol \n di akhir baris.

Berikut adalah contoh menggunakan ekspresi reguler:

▶ Run
#!/usr/bin/perl

my $string = "Line1\nLine2\n\n\n";

$string =~ s/\n*$//;

print "'$string'";

Cara lain untuk menghapus semua spasi tambahan ini adalah untuk menetapkan nilai variabel $/ untuk string kosong:

▶ Run
#!/usr/bin/perl

$/ = '';

my $string = "Line1\nLine2\n\n\n";

chomp($string);

print "'$string'";

Penggunaan ekspresi reguler yang baik: ini adalah jelas dan tidak berubah variabel global yang dapat mempengaruhi kode di lainnya bagian dari program ini.

Dokumentasi resmi

Berikut ini adalah output dari perintah 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 = <STDIN>);

               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)".

Topik terkait

Artikel lainnya