0

我使用以下代码删除文件的第一行:

use Tie::File;
tie @task_queue, 'Tie::File', $queue_path or die $!;
shift @task_queue;
$#task_queue -= 1;
untie @task_queue;

文件内容如下:

line1
line2
line3

但是当我使用代码时,它会删除 line1 但在文件末尾留下一个换行符,如下所示:

line2
line3
# <- here is a blank line

由于我将此文件用作队列,因此如果在之后添加一些新行,它将变为:

line2
line3
# <- here is a blank line
line4

那么在使用 Tie::File 删除第一行时,有什么办法可以避免留空行呢?

4

2 回答 2

1

我不知道这是否是一个好的解决方案,但它会删除文件末尾的空白行。

while ($task_queue[-1] eq '') {
    pop @task_queue;
}
于 2014-07-16T00:07:32.403 回答
0

感谢所有这些帮助。我找到了一个解决方案,它不是漂亮的代码,但可以工作。我还发现即使我只打领带和解领带(它们之间没有任何动作),仍然会生成空白行。这可能是模块的一些设计问题。

use Tie::File;
tie @task_queue, 'Tie::File', $queue_task_path or die $!;
shift @task_queue;
untie @task_queue;
print("Removing the blank line.\n");
my $queue_task_file_size = -s $task_queue;
truncate($task_queue, $queue_task_file_size - 1);
于 2014-07-16T21:15:08.780 回答