Không, không thể không có
eval
, vì
require()
cần tên mô-đun thanh viên, như được mô tả tại
perldoc -f require. Tuy nhiên, nó không phải là một sử dụng ác của eval, vì nó không cho phép tiêm mã tùy ý (giả sử bạn có quyền kiểm soát nội dung của tập tin bạn đang
require
ing, tất nhiên).
EDIT: Mã được sửa đổi bên dưới, nhưng tôi sẽ rời phiên bản đầu tiên để hoàn chỉnh.
tôi sử dụng
tôi sử dụng để sử dụng module này ít đường để làm tải trọng động trong thời gian chạy:
package MyApp::Util::RequireClass;
use strict;
use warnings;
use Exporter 'import'; # gives you Exporter's import() method directly
our @EXPORT_OK = qw(requireClass);
# Usage: requireClass(moduleName);
# does not do imports (wrong scope) -- you should do this after calling me: $class->import(@imports);
sub requireClass
{
my ($class) = @_;
eval "require $class" or do { die "Ack, can't load $class: [email protected]" };
}
1;
PS. Tôi đang nhìn chằm chằm vào định nghĩa này (tôi đã viết nó khá lâu trước đây) và tôi đang cân nhắc việc thêm điều này: $class->export_to_level(1, undef, @imports);
... nó nên hoạt động, nhưng không được kiểm tra.
EDIT: phiên bản 2 bây giờ, đẹp hơn nhiều mà không có một eval (nhờ ysth): :)
package MyApp::Util::RequireClass;
use strict;
use warnings;
use Exporter 'import'; # gives you Exporter's import() method directly
our @EXPORT_OK = qw(requireClass);
# Usage: requireClass(moduleName);
# does not do imports (wrong scope) -- you should do this after calling me: $class->import(@imports);
sub requireClass
{
my ($class) = @_;
(my $file = $class) =~ s|::|/|g;
$file .= '.pm';
require $file; # will die if there was an error
}
1;
Trùng lặp: http://stackoverflow.com/questions/442710/how-do-i-use-a-perl-package-known-only-in-runtime –
Xin lỗi về điều đó. Tôi đã tìm kiếm nhưng không thể ' – user226723
Tôi nhận được các tiêu chuẩn mã hóa của bạn được cập nhật. Không có gì sai hoặc không an toàn về việc đánh giá những gì cơ bản được mã hóa cứng chuỗi. Đó là cách đơn giản nhất để hoàn thành những gì bạn muốn. Nếu bạn đang chuyển vào đầu vào của người dùng, đó là một câu chuyện khác ... – runrig