我有一个带有此列定义的sqlite(v3)表:
"timestamp" DATETIME DEFAULT CURRENT_TIMESTAMP
Run Code Online (Sandbox Code Playgroud)
此数据库所在的服务器位于CST时区.当我在不包含timestamp列的情况下插入到我的表中时,sqlite会自动使用GMT中的当前时间戳填充该字段,而不是CST.
有没有办法修改我的insert语句以强制存储的时间戳在CST中?另一方面,最好将它存储在GMT中(例如,如果数据库被移动到不同的时区),那么我是否可以修改我的选择SQL以将存储的时间戳转换为CST从表中提取它?
是否有任何shell(特别是bash或ksh)检查程序可以测试shell脚本的样式,最佳实践,命名约定等?(像Lint for C,或Perl :: Critic for Perl.)
我知道使用ksh你可以通过运行来进行语法检查,ksh -n script.ksh
但我希望的不仅仅是sytax检查 - 解析/分析实际代码的东西?
我可能运气不好,但我想这并没有伤害.
请注意 - 我不是在寻找打开/读取文件的"正确"方式,也不是每次都打开/读取文件的方式.我只是想知道大多数人使用的方式,并且可能同时学习一些新方法:)*
我的Perl程序中一个非常常见的代码块是打开一个文件并读取或写入它.我已经看到了很多这样做的方法,多年来我执行这项任务的风格发生了变化.我只是想知道什么是最好的(如果有最好的方法)方法是这样做的?
我以前打开这样的文件:
my $input_file = "/path/to/my/file";
open INPUT_FILE, "<$input_file" || die "Can't open $input_file: $!\n";
Run Code Online (Sandbox Code Playgroud)
但我认为错误捕获存在问题.
添加括号似乎可以修复错误捕获:
open (INPUT_FILE, "<$input_file") || die "Can't open $input_file: $!\n";
Run Code Online (Sandbox Code Playgroud)
我知道你也可以给一个变量分配一个文件句柄,所以不像我上面那样使用"INPUT_FILE",我可以使用$ input_filehandle - 这样更好吗?
对于读取文件,如果它很小,那么globbing有什么问题吗?
my @array = <INPUT_FILE>;
Run Code Online (Sandbox Code Playgroud)
要么
my $file_contents = join( "\n", <INPUT_FILE> );
Run Code Online (Sandbox Code Playgroud)
或者你应该总是循环,像这样:
my @array;
while (<INPUT_FILE>) {
push(@array, $_);
}
Run Code Online (Sandbox Code Playgroud)
我知道有很多方法可以在perl中完成任务,我只是想知道在文件中是否有打开和读取的首选/标准方法?
我一直在使用javascript,但从未学过语言超过基础知识.我正在阅读John Resig的"Pro Javascript技术" - 我想出了一些问题,但我没有在书中或谷歌上找到答案.
约翰在他的书中给出了这个例子:
功能#1
function User( name, age ){
this.name = name;
this.age = age;
}
// Add a new function to the object prototype
User.prototype.getName = function(){
return this.name;
};
User.prototype.getAge = function(){
return this.age;
};
var user = new User( "Bob", 44 );
console.log("User: " + user.getName() + ", Age: " + user.getAge());
Run Code Online (Sandbox Code Playgroud)
我还在学习原型属性,所以我尝试写类似的东西:
功能#2
function User (name, age ) {
this.name = name;
this.age = age;
this.getName = function() {
return this.name; …
Run Code Online (Sandbox Code Playgroud) 我正在研究一个小的Perl模块,由于某种原因,我有一个测试驱动程序脚本,它使用我的新模块调用我认为是私有的函数之一,并且它是成功的.我很惊讶,所以我开始搜索谷歌,我真的找不到任何关于如何在Perl模块中创建私有函数的文档...
我看到一个地方说要在你的"私人"功能的右大括号之后加一个分号,如下所示:
sub my_private_function {
...
};
Run Code Online (Sandbox Code Playgroud)
我尝试过,但我的驱动程序脚本仍然可以访问我想要私有的功能.
我会做一些简短的例子,但这就是我所追求的:
模块TestPrivate.pm:
package TestPrivate;
require 5.004;
use strict;
use warnings;
use Carp;
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
require Exporter;
@ISA = qw(Exporter AutoLoader);
our @EXPORT_OK = qw( public_function );
our @EXPORT = qw( );
$VERSION = '0.01';
sub new {
my ( $class, %args ) = @_;
my $self = {};
bless( $self, $class );
$self->private_function("THIS SHOULD BE PRIVATE");
$self->{public_variable} = "This is public";
return $self;
}
sub public_function {
my …
Run Code Online (Sandbox Code Playgroud) 我在Oracle 9.2.0.6数据库中有一个表users.其中两个字段是varchar - last_name和first_name.
当行插入此表时,第一个名称和姓氏字段应该全部为大写,但不知何故,这两个字段中的某些值是大小写混合的.
我想运行一个查询,它将向我显示表中包含带小写字符的名字或姓氏的所有行.
我在网上搜索并找到了REGEXP_LIKE,但这必须是为了更新版本的oracle - 它似乎对我不起作用.
我尝试的另一件事是将"abcde ... z"翻译为"$$$$$ ... $",然后在我的字段中搜索"$",但必须有更好的方法吗?
提前致谢!
我正在写一个Perl模块,我正在使用carp将非致命警告发送回调用程序.
鲤鱼警告工作正常 - 我正在检查输入参数是否满足某个条件 - 如果它不符合条件,则发送警告鲤鱼并且模块继续使用参数的默认值而不是调用程序的参数通过.警告只是通知正在使用默认参数而不是传入的参数.
我的问题是我的测试脚本.我的测试脚本正在向模块发送一个错误的参数,我正在尝试捕获返回的警告消息,并确保我收到了正确的警告消息.
我的模块看起来像这样:
else {
carp "value must be numeric - using default value";
}
Run Code Online (Sandbox Code Playgroud)
我的测试脚本如下所示:
eval {
#call to my module
};
like (
$@,
qr/value must be numeric/,
"Should abort on non-numeric value"
);
Run Code Online (Sandbox Code Playgroud)
当我运行测试时,我可以在屏幕上看到警告(它必须是STDERR),但$ @变量的内容是'' - 空白.
这是我的测试脚本的输出:
t/04bad_method_calls....ok 10/12value must be numeric - using default value at ...
# Failed test 'Should abort on non-numeric value'
# at t/04bad_method_calls.t line 98.
t/04bad_method_calls....NOK 12
# '' doesn't match '(?-xism:value must be numeric)' …
Run Code Online (Sandbox Code Playgroud) 我需要升级Perl CGI脚本,用户必须完成3个步骤.完成每个步骤后,脚本将记录用户完成的步骤.记录这一点很重要,因此我们可以向用户证明他们只完成了第一步,并没有完成所有三个步骤.
现在,该脚本正在为CGI脚本的每个实例创建1个日志文件.因此,如果UserA执行步骤1,则UserB执行步骤1,然后执行步骤2,然后执行步骤3 - 然后UserA完成步骤2和步骤3,即日志文件的顺序.
LogFile.UserA.Step1
LogFile.UserB.Step1
LogFile.UserB.Step2
LogFile.UserB.Step3
LogFile.UserA.Step2
LogFile.UserA.Step3
Run Code Online (Sandbox Code Playgroud)
日志文件以当前时间戳,随机数和进程PID命名.
这样可以防止同一个文件被多次写入,但是该目录可以快速获取数千个文件(每个文件只包含几个字节).有一个旋转和压缩这些日志的过程,但是由于脚本每天只记录一个文件以减少正在创建的日志文件的数量,因此我不得不这样做.
基本上,日志文件将在文件名中包含当前日期,并且只要CGI脚本需要写入日志,它就会追加到当天的一个日志文件,无论用户或他们在哪个步骤.
什么都不需要读取日志文件 - 唯一会发生的事情是CGI脚本的追加.日志轮换将在7天或更早的日志文件上运行.
我的问题是,处理并发附加到此日志文件的最佳方法是什么?在追加之前我需要锁定它吗?我发现Perl Monks上的这个页面似乎表明"当多个进程正在写入同一个文件时,并且所有这些进程都打开了附加文件,数据不会被覆盖."
我已经了解到,仅仅因为它可以完成并不意味着我应该这样做,但在这种情况下,最安全,最佳实践的方法是什么?
摘要:
谢谢!
在我的工作中,他们在内部网页上使用"中央登录"工具.每当内部网页需要身份验证时,它会将您转发到中央登录,登录后,它会将您发送回您尝试查看的页面.
此中央登录页面的HTML中的第一行以此开头:
<!-- Encoding=ISO-8859-1;
Run Code Online (Sandbox Code Playgroud)
但它永远不会结束评论,这意味着整个文档中的所有HTML代码实际上都被注释掉了.这在IE6(这是公司标准 - eek!)中运行良好,并且它曾经在Firefox中工作,但是当我升级到Firefox 4时,它不再起作用(因为它不应该 - 它遵循标准).
我已保存源并将第一行更改为:
<!-- Encoding=ISO-8859-1; -->
Run Code Online (Sandbox Code Playgroud)
然后页面将显示,但由于它是从中加载的file:///
,我无法将我的凭据提交给主服务器...
我讨厌使用IE6,但是对于所有内部页面我都坚持使用它,因为每次我发送到中央登录时Firefox都会呈现一个空页面.
是否有可能创建一个Firefox插件(甚至是Greasemonkey脚本)来修改HTML,因为它在呈现之前进入浏览器?我看到大量的示例在加载HTML后修改HTML,但在加载时无法找到任何操作.
我想除了插件之外,我对其他解决方案持开放态度,但这是我唯一能想到的.此外,我们不允许使用Chrome或Safari,因此不存在.不,我不能与负责中央登录页面的人交谈并让他们改变它.由于页面的性质,代理也可能非常困难.
提前致谢!
我最近看到一些让我困惑的Perl代码.我拿出所有额外的部分来看它是如何工作的,但我仍然不明白为什么它有效.
基本上,我创建了这个虚拟"模块"(TTT.pm):
use strict;
use warnings;
package TTT;
sub new {
my $class = shift;
return bless {'Test' => 'Test'}, $class;
}
sub acquire {
my $tt = new TTT();
return $tt;
}
1;
Run Code Online (Sandbox Code Playgroud)
然后我创建了这个脚本来使用模块(ttt.pl):
#!/usr/bin/perl
use strict;
use warnings;
use TTT;
our $VERSION = 1;
my $tt = acquire TTT;
print $tt->{Test};
Run Code Online (Sandbox Code Playgroud)
困扰我的那条线,我以为不行,是:
my $tt = acquire TTT;
Run Code Online (Sandbox Code Playgroud)
我认为它不起作用,因为"获取"子从未出口.但它确实有效.收到电话后,我对"TTT"感到困惑,所以我把它删除了,留下这样的一行:
my $tt = acquire;
Run Code Online (Sandbox Code Playgroud)
并且它抱怨了一个赤字,就像我想的那样.我添加了parens,像这样:
my $tt = acquire();
Run Code Online (Sandbox Code Playgroud)
它抱怨说没有main::acquire
,就像我想的那样.
我习惯了对象可用的子程序,或者导出的子程序,但是我从未见过最后用包名调用子程序.我甚至不知道如何在Google上搜索此内容.
所以我的问题是,在子程序调用后如何添加包名?我之前从未见过这样的东西,这可能不是一个好习惯,但有人可以解释一下Perl在做什么吗?
谢谢!