如何编写一个Perl脚本,在每次运行时生成一个新的日志文件';跑什么?

如何编写一个Perl脚本,在每次运行时生成一个新的日志文件';跑什么?,perl,Perl,我试图修改Perl脚本,以便在每次运行脚本时创建不同的/新的日志文件。我试图按日期创建每个日志文件,但在合并此概念时遇到了问题。。。这就是我到目前为止所做的: #!perl -w use WWW::Mechanize; # What URL shall we retrieve? $url = "http://www.mediabase.com/whatsong/whatsong.asp?var_s=075068071069045070077"; # Create a new instanc

我试图修改Perl脚本,以便在每次运行脚本时创建不同的/新的日志文件。我试图按日期创建每个日志文件,但在合并此概念时遇到了问题。。。这就是我到目前为止所做的:

#!perl -w

use WWW::Mechanize;

# What URL shall we retrieve?
$url = "http://www.mediabase.com/whatsong/whatsong.asp?var_s=075068071069045070077";

# Create a new instance of WWW::Mechanize
# enabling autocheck checks each request to ensure it was successful,
# producing an error if not.
my $mechanize = WWW::Mechanize->new(autocheck => 1);

# Retrieve the page
$mechanize->get($url);

# Assign the page content to $page
my $page = $mechanize->content;

# Output the page
#print $page;

# Let's also save the page locally
open LOG, ">>", "102.1_content.txt";

#print LOG $page; #######get error here when run from c++....

close(LOG);
########################################
########################################
# INPUT_FILE
open INPUT_FILE, "<", "102.1_content.txt";
########################################
my $html = join '', <INPUT_FILE>;

my @stuff = $html =~ />([^<]+)</g;
########################################

use Time::localtime;
$tm = localtime;
print "*****", $tm->mon+1, "/", $tm->mday, "/", 
      $tm->year+1900, "--", $tm->hour, "::", 
      $tm->min, "::", $tm->sec, 
      "******************************";
##sec, min, hour, mday, mon, year, wday, yday, and isdst
########################################
# OUTPUT_FILE
open OUTPUT_FILE, ">>", ("PLAYLIST_TABLE_"$tm->mon+1, "/", $tm->mday, "/", tm->year+1900".txt") or die $!;
########################################
print OUTPUT_FILE "******************************", 
            $tm->mon+1, "/", $tm->mday, "/", $tm->year+1900, 
            "--", $tm->hour, "::", $tm->min, "::", $tm->sec, 
            "******************************");

print join ("   ", @stuff), "\n";

print OUTPUT_FILE join ("           ", @stuff), "\n";

print "thats all!\n";

close(INPUT_FILE);
close(OUTPUT_FILE);
#!perl-w
使用WWW::Mechanize;
#我们应该检索什么URL?
$url=”http://www.mediabase.com/whatsong/whatsong.asp?var_s=075068071069045070077";
#创建WWW::Mechanize的新实例
#启用自动检查将检查每个请求以确保其成功,
#如果没有,则生成错误。
my$mechanize=WWW::mechanize->new(自动检查=>1);
#检索页面
$mechanize->get($url);
#将页面内容分配给$page
我的$page=$mechanize->content;
#输出页面
#打印$page;
#让我们也在本地保存页面
打开日志“>>”,“102.1_content.txt”;
#打印日志$页#######从C++运行时,这里得到错误。
关闭(日志);
########################################
########################################
#输入文件
打开输入文件“>”,(“播放列表”$tm->mon+1“/”,$tm->mday“/”,tm->year+1900.txt)或die$!;
########################################
打印输出文件“*******************************”,
$tm->mon+1,“/”,$tm->mday,“/”,$tm->year+1900,
“-”,$tm->hour,”::“,$tm->min,”:::“,$tm->sec,
"******************************");
打印联接(“,@stuff),“\n”;
打印输出文件连接(“,@stuff)”,“\n”;
打印“仅此而已!\n”;
关闭(输入_文件);
关闭(输出文件);
我很抱歉,我知道我的代码很乱,提前谢谢你


尼克

您应该使用
(点)来连接字符串。此处为文件名字符串,它变为:

open (OUTPUT_FILE, ">> PLAYLIST_TABLE_" . ($tm->mon+1) .  "/" . $tm->mday . "/" . ($tm->year+1900) . ".txt") or die $!;

(逗号)仅适用于
print
AFAIK,并且仅因为字符串中数组的常规转换是
print

的串联,所以应使用
(点)串联字符串。此处为文件名字符串,它变为:

open (OUTPUT_FILE, ">> PLAYLIST_TABLE_" . ($tm->mon+1) .  "/" . $tm->mday . "/" . ($tm->year+1900) . ".txt") or die $!;
(逗号)仅适用于
print
AFAIK,并且仅因为字符串中数组的通常转换是
print

的串联,所以使用或操作文件名和路径:

#!/usr/bin/perl

use strict;
use warnings;

use File::Spec::Functions qw( catfile );

my ($mday, $mon, $year) = (localtime)[3 .. 5];

my $filename = catfile(
    sprintf('PLAYLIST_TABLE_%02d', $mon + 1),
    sprintf('%02d', $mday),
    sprintf('%04d.txt', $year + 1900)
);

print $filename, "\n";
输出(在Windows上):

因此,及时关闭运行的日志文件在文件系统中保持“关闭”

请避免使用非常长的字符串连接行。它们使得在混乱中隐藏语法错误时很难看到发生了什么。相反,您可以使用
join

join('/', 
    "PLAYLIST_TABLE_" . ($tm->mon + 1),
    $tm->mday,
    ($tm->year + 1900) . '.txt'
);
使用或操纵文件名和路径:

#!/usr/bin/perl

use strict;
use warnings;

use File::Spec::Functions qw( catfile );

my ($mday, $mon, $year) = (localtime)[3 .. 5];

my $filename = catfile(
    sprintf('PLAYLIST_TABLE_%02d', $mon + 1),
    sprintf('%02d', $mday),
    sprintf('%04d.txt', $year + 1900)
);

print $filename, "\n";
输出(在Windows上):

因此,及时关闭运行的日志文件在文件系统中保持“关闭”

请避免使用非常长的字符串连接行。它们使得在混乱中隐藏语法错误时很难看到发生了什么。相反,您可以使用
join

join('/', 
    "PLAYLIST_TABLE_" . ($tm->mon + 1),
    $tm->mday,
    ($tm->year + 1900) . '.txt'
);

你忘了做错误检查,所以

use autodie;
我们都应该更喜欢ISO8601格式的日期/时间戳:)


你忘了做错误检查,所以

use autodie;
我们都应该更喜欢ISO8601格式的日期/时间戳:)


好的,谢谢你,我知道这一定很简单,哈哈,谢谢!:)请避免长字符串连接。它们在混乱中隐藏了逻辑和语法上的错误(如本例)。@nick:我编辑了我的答案,因为我忘记了上一年的
$
。对不起,我以前不能测试它。好的,谢谢你,我知道它必须是简单的,哈哈,谢谢!:)请避免长字符串连接。它们在混乱中隐藏了逻辑和语法上的错误(如本例)。@nick:我编辑了我的答案,因为我忘记了上一年的
$
。很抱歉,我以前无法测试它。我看到
使用strict
失败、一两个语法错误以及试图使用正则表达式解析HTML。您应该修复这些问题以避免以后出现问题。我看到
使用strict
失败、一两个语法错误以及试图使用正则表达式解析HTML。你应该解决这些问题以避免以后的麻烦。