Основная проблема в том, что вы не создали объект Image::Grab
. Вы должны обязательно use strict
и use warnings
в начале всех ваших программ, особенно когда вы просите о помощи с ними. Это позволит Perl находить и сообщать о простых ошибках, которые вы могли упустить из виду.
Эта программа делает то, что вы хотели, а также переводит имя файла в более читабельную форму
use strict;
use warnings;
use Image::Grab;
my $pic = Image::Grab->new;
$pic->url('http://www.vikingskipet.no/cam_1.jpg');
$pic->grab;
my $file = do {
my @dt = reverse((localtime)[0..5]);
$dt[0] += 1900;
$dt[1]++;
sprintf "%04d-%02d-%02d.%02d.%02d.%02d.jpg", @dt;
};
open my $img, '>:raw', $file or die qq(Can't open "$file" for output: $!);
print $img $pic->image;
close $img or die qq(Failed to close "$file": $!);
print qq(Image file "$file" saved successfully\n);