Tôi muốn biết về các phương pháp hay nhất tại đây. Giả sử tôi muốn lấy nội dung của một số dòng của một tập tin. Tôi có thể sử dụng một lệnh shell một dòng để có được câu trả lời của tôi, hoặc viết một chương trình con, như trong đoạn mã dưới đây.Trong kịch bản Perl, chúng ta có nên sử dụng các lệnh shell hay gọi các hàm Perl mà bắt chước các hoạt động của trình bao?
Một tập tin văn bản có tên some_text
:
She laughed. Then both continued eating in silence, like strangers,
but after dinner they walked side by side; and there sprang up
between them the light jesting conversation of people who are free
and satisfied, to whom it does not matter where they go or what
they talk about.
Mã để có được nội dung của dòng 5 của tập tin
#!perl
use warnings;
use strict;
my $file = "some_text";
my $lnum = 5;
my $shellcmd = "awk 'NR==$lnum' $file";
print qx($shellcmd);
print getSrcLine($file, $lnum);
sub getSrcLine {
my($file, $lnum) = @_;
open FILE, $file or die "$!";
my @ray = <FILE>;
return $ray[$lnum-1];
}
Tôi yêu cầu này bởi vì tôi nhìn thấy rất nhiều kịch bản Perl nơi tại một số điểm, một lệnh shell được gọi, trong khi tại một số điểm sau đó, cùng một nhiệm vụ được thực hiện bằng một cuộc gọi đến một hàm (thư viện hoặc viết tay), ví dụ, rm -rf
so với File::Path::rmtree
. Tôi chỉ muốn làm cho nó phù hợp.
Bạn nên làm gì?
Cách được khuyên dùng tùy thuộc vào ý định của mã.Nếu bạn muốn thực thi trên máy Unix không thì hãy đi với các thư viện perl khác xem liên kết tôi đã đăng .. Hy vọng điều này sẽ giúp .. – Rajeev
Có thể mỗi tập lệnh được phát triển trong một khoảng thời gian, có thể bởi nhiều lập trình viên. Các kịch bản phát triển, và mã không phải là 100% tự nhất quán, tùy thuộc một phần vào cách những người tham gia có nhiều kinh nghiệm với Perl và shell. –
Lưu ý rằng trong khi slurping một tập tin toàn bộ 5 dòng để có được dòng thứ năm không phải là quá đau đớn, nó có lẽ là một chiến lược phụ tối ưu để nhận được dòng thứ năm của một tập tin triệu dòng. –