Chức năng chomp() trong Perl

Perl ngôn ngữ đã được tích hợp trong chức năng chomp(). Bạn có thể sử dụng năng này khi làm việc với dây. Trong trường hợp đơn giản, các chức năng chomp() loại bỏ cuối cùng biểu tượng \nAC đó là một thông qua luận trong những chức năng.

Đây là một ví dụ:

▶ Run
#!/usr/bin/perl

my $string = "ASDF\n";

chomp($string);

print "'$string'";

Này, chương trình hiển thị các văn bản 'ASDF'.

  • Nếu các giá trị của biến không kết thúc với \n, những giá trị sẽ không thay đổi
  • Nếu biến có nhiều hơn một nhân vật \n cuối cùng, nó sẽ được xóa nhân vật duy nhất \n

Lập luận

Nếu các chức năng chomp không được thông qua bất kỳ lập luận, các chức năng làm việc với định biến $_:

▶ Run
#!/usr/bin/perl

$_ = "123\n";

chomp;

print "'$_'";

Trong trường hợp đó, nếu biến $_undef và sử dụng use warnings;, sẽ cảnh báo:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

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

Trong chức năng chomp() , bạn có thể vượt qua giả, mảng, băm. Trong trường hợp của băm các năng sẽ chỉ làm việc với giá trị của chìa khóa, chìa khóa mình sẽ không thay đổi.

Lập luận của các chức năng chomp() luôn luôn phải biến. Nếu để cố gắng vượt qua chức năng này một chuỗi, nó sẽ lỗi và chương trình thực hiện sẽ được dừng lại:

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

Trở lại giá trị

Chức năng chomp() luôn luôn trở về một số nguyên lớn hơn hoặc bằng 0. Nếu các chức năng trở về 0, điều này có nghĩa là không thể thay thế. Số lượng nhiều hơn 0 nghĩa là bao nhiêu nó thay đổi.

Đây là một ví dụ về tình hình một khi các chức năng chomp() trả về số 2:

▶ Run
#!/usr/bin/perl

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

Đây là một ví dụ sử dụng sự trở lại giá trị để đáp ứng khác nhau mã nếu đã có một người thay thế, hoặc thay thế được không:

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

Biến $/

Chức năng chomp() loại bỏ sự kết thúc của dòng biểu tượng được chứa trong toàn cầu biến $/. Bởi định biến này chứa các biểu tượng \n. Nhưng bạn có thể bài ở đây một biến của một số biểu tượng khác và sau đó các chức năng chomp() sẽ loại bỏ nó. Đây là một ví dụ:

▶ Run
#!/usr/bin/perl

$/ = "F";

my $string = "ASDF";

chomp($string);

print "'$string'";

Chương trình sẽ hiển thị các văn bản 'ASD'.

Trong trường hợp đó, nếu biến là một chuỗi rỗng ($/ = '';), sau đó chomp() sẽ bỏ duy nhất dấu \n, và tất cả các nhân vật \n vào cuối hàng.

Chuẩn sử dụng

Rất thường xuyên một chức năng của chomp() được sử dụng để đọc từng dòng từ tập tin. Cho xử lý dây từ một tập tin đó thường là thuận tiện để trong những dòng này là không nó là biểu tượng \n cuối cùng của dòng:

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

Để loại bỏ tất cả các nhân vật \n cuối cùng của dòng

Thường là một chức năng của chomp() loại bỏ chỉ một trong những nhân vật \n cuối cùng của dòng:

▶ Run
#!/usr/bin/perl

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

chomp($string);

print "'$string'";

Kết quả:

'Line1
Line2

'

Có một số cách làm thế nào bạn có thể loại bỏ tất cả các biểu tượng \n ở cuối đường.

Đây là một ví dụ sử dụng biểu thức thông thường:

▶ Run
#!/usr/bin/perl

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

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

print "'$string'";

Một cách để loại bỏ tất cả các dấu là không gian để đặt giá trị biến $/ đến một chuỗi rỗng:

▶ Run
#!/usr/bin/perl

$/ = '';

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

chomp($string);

print "'$string'";

Sử dụng biểu thức thông thường là tốt hơn: nó là rõ ràng hơn, và không thay đổi biến toàn cầu đó có thể ảnh hưởng đến mã trong khác phần của chương trình.

Tài liệu chính thức

Đây là kết quả của sự chỉ huy 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)".

Chủ đề liên quan

Các bài viết khác