Есть два разных способа сделать это, в зависимости от того, что вы ищете.
- Блок
END
выполняется, когда переводчик выключен. Смотрите предыдущий ответ для более подробной информации:)
- Блок / суб
DESTROY
, который выполняется, когда ваш объект выходит из области видимости. То есть, если вы хотите встроить свою логику в модуль или класс, вы можете использовать DESTROY
.
Взгляните на следующий пример (это рабочий пример, но некоторые детали, такие как проверка ошибок и т. Д. Опущены):
#!/usr/bin/env perl
package File::Persistent;
use strict;
use warnings;
use File::Slurp;
sub new {
my ($class, $opt) = @_;
$opt ||= {};
my $filename = $opt->{filename} || "./tmpfile";
my $self = {
_filename => $filename,
_content => "",
};
# Read in existing content
if (-s $filename) {
$self->{_content} = File::Slurp::read_file($filename);
}
bless $self, $class;
}
sub filename {
my ($self) = @_;
return $self->{_filename};
}
sub write {
my ($self, @lines) = @_;
$self->{_content} .= join("\n", @lines);
return;
}
sub DESTROY {
my ($self) = @_;
open my $file_handle, '>', $self->filename
or die "Couldn't save persistent storage: $!";
print $file_handle $self->{_content};
close $file_handle;
}
# Your script starts here...
package main;
my $file = File::Persistent->new();
$file->write("Some content\n");
# Time passes...
$file->write("Something else\n");
# Time passes...
$file->write("I should be done now\n");
# File will be written to only here..