有没有办法使用模块在perl中节省内存和编译时间?例如,不加载所有不必要的,未使用的潜艇?
或者,如果我将我的潜艇分成许多不同的pm
文件,然后我只加载必要的模块,这是一个好方法?例如:
#!/usr/bin/perl -w
sub mysub1() {
use MySubsGroup1;
}
sub mysub2() {
use MySubsGroup2;
}
此解决方案使用更少的内存并减少编译时间?或者只加载必要的函数的最佳做法是什么?
答案 0 :(得分:4)
autouse - 推迟加载模块直到使用函数
如果已加载模块Module,则声明
use autouse 'Module' => qw(func1 func2($;$));
相当于
use Module qw(func1 func2);
答案 1 :(得分:3)
@store = Store.find(1)
@today = Date.today - 1.days
@open_items = ChecklistItem.find_by_sql(["SELECT checklist_items.*, checklist_checks.* FROM checklist_items LEFT OUTER JOIN checklist_checks ON checklist_checks.checklist_item_id = checklist_items.id AND checklist_checks.store_id = ? AND checklist_checks.report_date = ? WHERE checklist_items.list_type='open' AND (checklist_items.store_id=? OR checklist_items.store_ID IS NULL)", @store.id, @today, @store_id])
ActiveRecord::Associations::Preloader.new.preload(@open_items, :checklist_checks)
> @open_items.first.name
=> "Turn on the lights"
> @open_items.first.id
=> nil
总是在编译时运行。但use
没有。因此,您可以在任何函数调用之前使用require
。
当然,只有在require Module;
第一次执行(并保持加载)时才会加载模块。
请注意require
也会在已加载的模块上调用use
,您也可能想要这样做。 import
是use Module qw(f1 f2)
的编译时版本。