小编Per*_*nti的帖子

找到未使用的"use'd"Perl模块

我正在研究一个非常大的,非常古老的"历史悠久的"代码库.在过去,经常有人在想"哦,我可能需要这个和那个模块,所以我只是把它包括......",后来,人们经常"缓存"模块内的数据("使用ThisAndThat"需要一些几秒钟加载从DB到RAM的几百MB,是的,它真的是一个愚蠢的想法,我们也在努力)因此,通常,我们有一个小模块使用20或30个模块,其中90%是在源本身中完全未使用,并且,由于在几个使用的子模块中"缓存",模块往往需要花费一分钟来加载甚至更多,这当然是不可接受的.

所以,我试图让它做得更好.现在,我的方式是查看所有模块,尽可能地了解它们,然后查看包括它们在内的所有模块,看看它们是否需要.

有没有更简单的方法?我的意思是:有一些函数返回模块所具有的所有子函数

...
return grep { defined &{"$module\::$_"} } keys %{"$module\::"}
Run Code Online (Sandbox Code Playgroud)

那么,有没有简单的方法可以看到哪些是默认导出的,哪些来自哪里,并在其他模块中使用?

一个简单的例子是Data :: Dumper,它几乎包含在每个文件中,甚至,当所有调试警告和打印等等都不在脚本中时.但是模块仍然需要加载Data :: Dumper.

有没有简单的方法来检查?

谢谢!

perl module

13
推荐指数
1
解决办法
1571
查看次数

如何在Perl中重新排列数组索引?

起初:为我不太好的英语道歉,我是一个17岁的德国人;-)

我作为网络开发人员做我的学徒,只是偶然发现了一个问题:

我需要重新排列数组的索引.该数组基本上是这样的:

@array = ( 'a', 'b', 'c' );
Run Code Online (Sandbox Code Playgroud)

但是:它会动态变化,因此它并不总是有3个元素,而是20个以上的元素.现在,我需要做的是将它变为:

@array = ( 'c', 'a', 'b' ); 
Run Code Online (Sandbox Code Playgroud)

所以,我认为我只需要做类似的事情(在一个for循环中,为数组中的每个元素循环一次并递增$ counter)

my $last = $array[$#array];
for($#array)
{
    $array[$counter] = $array[$counter + 1];
    unshift(@array, $last);
    pop(@array);
    $counter++;
}
Run Code Online (Sandbox Code Playgroud)

我以为它会这样做:

对于数组中的每个元素(假设,我们在元素0处):Set element index = element index + 1; 然后将最后一个数组添加到开头并删除现在的"真实"最后一个数组(这只是现在开头的副本).然后将1添加到计数器并重做该数组.但它并没有真正做我想要的.

嗯,这是我的"新手"尝试,所以再次,这就是我需要的:

我需要"移动"数组+1的所有元素索引,并切断最后一个,然后在开头.可能更复杂的是,数组长度只是可变的.

另一种形式:我需要转向

( 'a', 'b', 'c', 'd', ... 'z');
Run Code Online (Sandbox Code Playgroud)

( 'z', 'a', 'b', 'c', ... 'y' );
Run Code Online (Sandbox Code Playgroud)

我不知道如何继续,我会感激任何帮助.

谢谢 :-)

已经感谢您的所有食物!我忘了说我不能在星期一之前测试它,因为我不再工作了,而且我现在也没有来源.但是,谢谢,我相信你的解决方案中至少有一个会起作用!

arrays perl

1
推荐指数
1
解决办法
1212
查看次数

标签 统计

perl ×2

arrays ×1

module ×1