【发布时间】:2012-09-03 17:35:27
【问题描述】:
我对 Perl 的了解还不够,甚至不知道我要确切地要求什么,但我正在编写一系列子例程,以供许多单独的脚本使用,这些脚本都处理不同的传入平面文件。这个过程远非完美,但这是我必须处理的事情,我正在尝试为自己构建一个小型潜艇库,让我更容易管理这一切。每个脚本处理不同的传入平面文件,具有自己的格式、排序、分组和输出要求。一个常见的方面是我们有一些小的文本文件,其中包含用于命名输出文件的计数器,因此我们没有重复的文件名。
因为每个文件对数据的处理是不同的,所以我需要打开文件来获取我的计数器值,因为这是一个常见的操作,我想把它放在一个sub中来检索计数器。但随后需要编写特定的代码来处理数据。并且想要一个允许我在处理完数据后用计数器更新计数器的子程序。
如果第一个被调用,有没有办法让第二个子调用成为要求?理想情况下,它甚至可能是一个会阻止脚本运行的错误,就像语法错误一样。
编辑:这里有一些 [丑陋和简化的] 伪代码,以便更好地了解当前流程:
require "importLibrary.plx";
#open data source file
open DataIn, $filename;
# call getCounterInfo from importLibrary.plx to get
# the counter value from counter file
$counter = &getCounterInfo($counterFileName);
while (<DataIn>) {
# Process data based on unique formatting and requirements
# output to task files based on requirements and name files
# using the $counter increment $counter
}
#update counter file with new value of $counter
&updateCounterInfo($counter);
【问题讨论】:
-
您可以从第一个子程序调用第二个子程序(在第一个子程序中的所有错误处理完成之后)。或者,您可以使用第二个子程序检查第一个子程序是否成功运行的全局标志。或者,您可以将第一个 sub 中的指标作为参数之一传递给第二个 sub。蒂姆托迪! :)
-
问题是我需要第一个 sub 来返回计数器,以便我的脚本可以使用计数器处理和输出文件。在处理完数据之前,我无法调用第二个来更新文件。如果在脚本中调用第一个而没有在脚本中进一步调用第二个,我想抛出一个错误。我不能在第二个中进行测试,因为如果它正在测试一个全局变量,这意味着第二个被调用,从而使全局变量测试没有意义。
标签: perl compiler-errors subroutine required