使用Tie :: File删除第一行,而不在文件末尾留下换行符

时间:2014-07-15 23:19:30

标签: perl file newline blank-line

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

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删除第一行时,有没有办法避免留空?

2 个答案:

答案 0 :(得分:1)

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

while ($task_queue[-1] eq '') {
    pop @task_queue;
}

答案 1 :(得分: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);