Không phải lúc nào bạn cũng có thể làm những việc lặp đi lặp lại một cách đơn giản và thanh lịch.
Chỉ cần làm những gì bạn luôn làm khi bạn có mã chung được sao chép qua nhiều dự án:
Tìm kiếm CPAN, ai đó có thể đã có mã cho bạn. Đối với vấn đề này, tôi đã tìm thấy Scalar :: MoreUtils .
Nếu bạn không tìm thấy thứ mình thích trên CPAN, hãy tạo một mô-đun và đặt mã vào một chương trình con:
package My::String::Util;
use strict;
use warnings;
our @ISA = qw( Exporter );
our @EXPORT = ();
our @EXPORT_OK = qw( is_nonempty);
use Carp qw(croak);
sub is_nonempty ($) {
croak "is_nonempty() requires an argument"
unless @_ == 1;
no warnings 'uninitialized';
return( defined $_[0] and length $_[0] != 0 );
}
1;
Sau đó, trong mã của bạn, hãy gọi nó là:
use My::String::Util qw( is_nonempty );
if ( is_nonempty $name ) {
}
Hoặc nếu bạn phản đối nguyên mẫu và không phản đối việc Parens thêm, bỏ qua nguyên mẫu trong các mô-đun, và gọi nó là như sau: is_nonempty($name)
.
length undef
trả về undef, thay vì cảnh báo và trả về 0. Trong ngữ cảnh boolean, undef chỉ sai bằng 0, vì vậy nếu bạn đang nhắm mục tiêu v5.12 trở lên, bạn chỉ có thể viếtif (length $name) { ... }