数组与文件的Perl使用

数组与文件的Perl使用,perl,Perl,考虑到对性能/所用时间等的影响,以下哪项是编写代码的更好方法- (以下是一段伪代码,请忽略语法问题。这里的想法是了解在什么情况下使用数组和文件) 案例1: @array; # globally accessible sub 1 { #some operations on @array } . . . sub 2 { #print @array info } 案例2::#使用文件而不是数组 sub 1 { #open file1 #write to file1

考虑到对性能/所用时间等的影响,以下哪项是编写代码的更好方法- (以下是一段伪代码,请忽略语法问题。这里的想法是了解在什么情况下使用数组和文件) 案例1:

@array; # globally accessible
sub 1 {
    #some operations on @array
}
.
.
.
sub 2 {
    #print @array info
}
案例2::#使用文件而不是数组

 sub 1 {
   #open file1
    #write to file1
    #close file
} 
.
.
.
sub 2 {
    #open file1
    #read file1
    #print file1 info
    #close file1
}
这取决于你在潜艇里要做什么

第一个示例在给定的形式中没有意义(请对数组执行某些操作!您需要具体说明)

如果您从开始到结束按顺序处理内容,那么使用文件迭代器而不是将其读入内存是有意义的,因为这样,您就不会使用太多的系统内存,perls缓冲将以相对高效的方式处理文件读取

除非无法避免,否则应始终逐行处理文件

只要您需要在行之间来回移动,并在文件中向后跳转,那么第一种将整个文件读入内存的方法将使算法更易于编写(以牺牲一些系统内存为代价)


如果系统内存不足,您可以用一点时间来换取内存,请看一看,它可以让您像访问内存中的阵列一样访问磁盘上的文件。

@Pri-一般来说:RAM操作(因此-阵列)总是比I/O操作(文件)快得多。注意:
@array不是一个声明。它也不是全球性的。如果没有strict,它会创建一个包变量,但它不会在运行时真正声明它,就像
my
our
那样。您不能命名sub
1
2
。最好避免使用Tie::File,尤其是当您有内存问题时。这是一个巨大的记忆猪。您可能很容易使用比文件大小更多的内存@ikegami您可以建议使用什么模块来处理文件?我首先会努力避免出现这种情况(例如,通过重新排序数据、将数据加载到数据库中等)。