Jest używane przez cały czas w przepełnieniu stosu, ale naprawdę go nie rozumiem i nie mogę go uruchomić. Jednak wygląda na to, że jest naprawdę dobrym narzędziem do testowania.Używanie __DATA__ w programie
Jak uzyskać skrypt do odczytu we wszystkim poniżej __DATA__
w uchwycie pliku? Próbowałem go przeczytać na kilka sposobów, zamiast sczepić plik zewnętrzny. Dane są poprawne, pochodzą z pliku JIL AutoSys dla definicji zadań.
#!/efs/dist/perl5/core/5.10/exec/bin/perl
use strict;
use warnings;
my ($job, $machine, $command, @line_stat);
#these 4 lines below do not read in data to filehandle
#my $data = do {
# local $/;
# <DATA>;
#} ;
my $data = <DATA>; # does not work either
open(my $fh, '<:encoding(UTF-8)', $data)
or die "Could not open file '$data' $!";
my $count = 0;
while (my $line = <$fh>) {
#chomp $line;
if ($line =~ /\/\* -{17} \w+ -{17} \*\//) {
$count = 1;
}
elsif ($line =~ /(alarm_if_fail:)/) {
$count = 0;
}
elsif ($count) {
if ($line =~ m/insert_job: (\w+).*job_type: CMD/) {
push(@line_stat, $1);
}
elsif ($line =~ m/command:(.*)/) {
push(@line_stat, $1);
}
elsif ($line =~ m/machine:(.*)/) {
push(@line_stat, $1);
}
}
}
foreach my $line_wot (@line_stat) {
print "$line_wot\n";
}
__DATA__
/* ----------------- COME_AND_PLAY_WITH_US_DANNY ----------------- */
insert_job: COME_AND_PLAY_WITH_US_DANNY job_type: CMD
command: /bin/bash -pwd
machine: capser.com
owner: twins
permission: foo,foo
date_conditions: 1
days_of_week: mo,tu,we,th,fr
start_times: "04:00"
description: "Forever, and ever and ever"
std_in_file: "/home/room217"
std_out_file: "${CASPERSYSLOG}/room217.out"
std_err_file: "${CASPERSYSLOG}/room217.err
alarm_if_fail: 1
profile: "/autosys_profile"
timezone: US/Eastern
/* ----------------- COME_AND_PLAY_WITH_US_AGAIN_DANNY ----------------- */
insert_job: COME_AND_PLAY_WITH_US_AGAIN_DANNY job_type: CMD
command: /bin/bash -ls
machine: capser1.com
owner: twins
permission: foo,foo
date_conditions: 1
days_of_week: mo,tu,we,th,fr
start_times: "04:00"
description: "Forever, and ever and ever"
std_in_file: "/home/room217"
std_out_file: "${CASPERSYSLOG}/room217.out"
std_err_file: "${CASPERSYSLOG}/room217.err
alarm_if_fail: 1
profile: "/autosys_profile"
timezone: US/Eastern
/* ----------------- NEVER_PLAY_WITH_US_AGAIN_DANNY ----------------- */
insert_job: NEVER_PLAY_WITH_US_AGAIN_DANNY job_type: CMD
command: /bin/bash -rm *
machine: capser2.com
owner: twins
permission: foo,foo
date_conditions: 1
days_of_week: mo,tu,we,th,fr
start_times: "04:00"
description: "Forever, and ever and ever"
std_in_file: "/home/room217"
std_out_file: "${CASPERSYSLOG}/room217.out"
std_err_file: "${CASPERSYSLOG}/room217.err
alarm_if_fail: 1
profile: "/autosys_profile"
timezone: US/Eastern
'my $ fh = \ * DANYCH;' 'zamiast otwierać my $ fh ... –
Dla' klarowność preferuję jawne wyjście() tuż przed __DATA__. – ulix
'DATA' _is_ a filehandle, podobnie jak' STDIN'; odczytuje dane zgodne ze specjalnym literałem "__DATA__". Zobacz [\ _ \ _ DATA \ _ \ _] (http://perldoc.perl.org/functions/__DATA__.html) (ma link do 'perldata') i na przykład [ten post] (https: // stackoverflow.com/questions/13463509/the-data-syntax-in-perl). – zdim