Bạn cần kỷ lục sản lượng tách $ \ như xxfelixxx đã trả lời.
$/
khi bạn đọc là input record separator
. Thao tác nó có thể ảnh hưởng đến cách Perl đọc dữ liệu tệp bạn đã cung cấp. Ví dụ:
open my $fh, "<", $filename or die $!;
local $/; # enable localized slurp mode
my $content = <$fh>;
close $fh;
Ở trên làm cho toàn bộ nội dung tệp bị nén trong nội dung vô hướng $ vì chúng tôi đã đặt lại $/
.
Hãy xem xét các đoạn mã sau:
#!/usr/bin/perl
use strict;
use warnings;
my $content;
{local $/; $content = <DATA>}
print "Content is $content";
__DATA__
line 1
line 2
line 3
Output:
Content is line 1
line 2
line 3
Nhưng nếu bạn không đặt lại $ /, như trong đoạn mã sau:
#!/usr/bin/perl
use strict;
use warnings;
my $content = <DATA>;
print "Content is $content";
__DATA__
line 1
line 2
line 3
Output sẽ Content is line 1
.
Điều này là do dấu phân cách bản ghi đầu vào đã được đặt thành dòng mới và nó được trả lại sau dòng đầu tiên.
Nguồn
2015-07-13 17:29:28
Đây là bộ tách * đầu vào * có thể được điều khiển nếu bạn cần đọc các tệp được mã hóa CRLF hoặc CR. – tadman
'$ /' là ký tự eol hệ thống, điều này tốt nếu tệp bạn đang tạo chỉ dành cho việc sử dụng "Địa phương". Nếu bạn đang tạo tệp cho một số hệ điều hành KHÁC, ví dụ: bạn đang trên Linux xây dựng một tệp Windows, sau đó '$ /' là vô dụng. –
Bạn thực sự nên sử dụng dấu phân tách * đầu ra * '' $ \ '', nhưng tôi không thể thấy bất cứ điều gì sai trái khi thực hiện điều đó. Thực tế, hàm ['say'] (http://perldoc.perl.org/functions/say.html) chỉ làm như sau:" 'LIST' chỉ đơn giản là viết tắt của' {local $ \ = "\ n "; print LIST}' "(Nếu bạn đang sử dụng 5.10+, tôi sẽ chỉ sử dụng' say'.) – ThisSuitIsBlackNot