我寻求在perl脚本中使用基于区域设置的小数分隔符的方法.目前我看不到更好的解决方案而不仅仅是s/\./,/在特定的地方,但它很难看,我希望有更清洁的解决方案.
我想了解,我的模块是否与MySQL共享DBI连接或没有.我想确定他们的连接ID.可能有更好的解决方案(我想知道它们),但第一个问题仍然是知道连接ID.
在我的对象构造函数中,我有一条语句可以同时初始化两个属性:
($self->{token}, $self->{token_start}) = $self->_get_authorized_token();
Run Code Online (Sandbox Code Playgroud)
所以我得到了令牌,并且它在一条语句中一起开始了。
现在我尝试移植我的模块以使用Moo(se),在这里我不知道如何同时设置这两个绑定属性?一些伪代码将是这样的:
has qw/token token_start/ => (
is => 'rw',
default => shift->_get_authorized_token();
);
Run Code Online (Sandbox Code Playgroud)
但是如何以Moo(se)ish方式声明2个绑定属性?
编辑。我展示了该方法的代码_get_authorized_token,也许会带来一些想法:
sub _get_authorized_token {
my $self = shift;
my $postData = { 'apikey' => $self->{key} };
my $url = $self->{base_url} . '/seller';
my $xml = $self->_post(url => $url,
postdata => $postData,
);
my $ref = XMLin($xml, SuppressEmpty => '' );
my $time = $ref->{Notification_Datetime};
my $token = $ref->{Notification_Data}{body}{token};
return ($token, $time);
}
Run Code Online (Sandbox Code Playgroud) 我想知道,为什么我在使用DBI的Perl代码中形成的查询没有返回正确的记录.我有简单的查询,如:
my $query = "SELECT id FROM table WHERE title = ? AND price = ?";
Run Code Online (Sandbox Code Playgroud)
我执行它像:
my $sth = $dbh->prepare( $query );
my ($id) = $dbh->selectcol_arrayref( $sth, undef, $title, $price );
Run Code Online (Sandbox Code Playgroud)
大部分时间一切正常,但在一些罕见的情况下,我没有得到我预期的结果.所以我也试过CLI.带有可疑值的Fulled查询:
SELECT id FROM table WHERE title = 'Some title' AND price = 1.66;
Run Code Online (Sandbox Code Playgroud)
并得到了想要的记录.之后我也引用了价格值:
SELECT id FROM table WHERE title = 'Some title' AND price = '1.66';
Run Code Online (Sandbox Code Playgroud)
结果得到零记录.
之后我尝试了其他报价价格,比如'1.67',他们工作得很好.
这有什么问题?为什么这么简单的查询失败 为了重现行为,我将简单的模式和查询放到sqlfiddle,因为您可能会看到简单查询SELECT * FROM Table1 WHERE price = '1.66' OR price …
在数据库迁移脚本(psql)中,我想从表中查询的特定值开始创建序列,例如:
CREATE SEQUENCE book_id_seq START ( SELECT MAX(id) + 1 FROM book.book );
Run Code Online (Sandbox Code Playgroud)
或尝试设置\set start (SELECT MAX(id) + 1 FROM book.book)为使用变量,例如:
CREATE SEQUENCE book_id_seq START :'start';
Run Code Online (Sandbox Code Playgroud)
但使用\set并没有解释查询。
设置变量的另一种方法也不起作用
start := SELECT MAX(id) + 1 FROM book.book;
Run Code Online (Sandbox Code Playgroud)
给出了错误:
ERROR: syntax error at or near ":="
LINE 1: start := SELECT MAX(id) + 1 FROM book.book;
Run Code Online (Sandbox Code Playgroud)
选择值 INTO 也没有帮助,因为访问需要另一个 SELECT 查询。
使用静态值效果很好:
\set start 33
CREATE SEQUENCE book_id_seq START :'start'::int;
Run Code Online (Sandbox Code Playgroud)
如何使用动态起始值?
Postgres 9.6
在某些功能必须执行的情况下,我想在错误消息中包含更多上下文die。在某些情况下,我可以提供它,而在另一些情况下,我找不到好的方法。例如,使用RaiseError连接Postgres 的选项,每次失败都会得到异常,但是我无法为这些错误提供更多的上下文信息。我尝试使用die-handler,但是我无法找出一种合理的方法来至少包括被称为subroutine的参数:
try {
x( 'y' );
} catch {
say "CATCHED error: $_";
};
sub _die_handler {
my @caller = caller(1);
say "@caller"; # how to access @_ for this frame
die @_;
}
sub x {
local $SIG{__DIE__} = \&_die_handler;
die;
}
Run Code Online (Sandbox Code Playgroud)
我如何在上面的示例中看到x以“ y”作为参数调用的示例?
如果我尚未@_在子程序中进行修改,可以从我的子程序中访问它_die_handler吗?还是可以事先向处理程序提供一些数据?
我现在看到两个选择:
更好的方法呢?
我尝试构建项目的表单,我可以在其中放置不同的公式来计算某些字段.
主要问题:我想让公式双向工作,例如
price,表格应sum根据price(price*qty)计算.sum,表单应price根据sum(sum/ qty)计算项目.我找到了Calcx - 用于构建计算表单的强大而强大的jQuery插件,并根据我的需要修改了其中一个示例,但是没有想到有可能以某种方式让它像上面的描述中那样工作.
还有一些其他问题我找不到解决方案:
readonly: false应该是可编辑的.我的示例中的字段.sum仍然不可编辑.为什么?+和-按钮周围qty已场内,以增量/ DECR功能,但让他们正常工作,我不得不分离Calcx功能,并再次装即可.是否有更简单的方法来实现这一目标? 免责声明我的问题的解决方案也可能涉及除Calcx之外的其他技术.也许某些插件或框架有更好的工具来满足我的需求.
对于历史记录,我也在这里添加了代码示例,但是使用它可能更适合查看JSfiddle
<!DOCTYPE html>
<html>
<head>
<title>testc calcx</title>
<meta charset=utf-8>
<meta name=description content="testime">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript" src="/js/jquery-calx-1.1.9.js"></script>
<style type="text/css">
.plusminus {
font-weight: bold;
font-family: monospace;
font-size: 1.3em;
border: 1px green solid;
padding: …Run Code Online (Sandbox Code Playgroud) 有时我会被非常基本的事情咬伤。我记得split基于PATTERN用作字符串或正则表达式有不同的行为。现在阅读文档似乎没有这样的区别,在整个文档中,只有一种情况(awk-like 行为),其中模式以带引号的字符串形式呈现,在其他所有示例中,模式都在斜杠之间,作为正则表达式。尽管如此,我还是在这里和那里找到了示例/教程,例如,哪里提到了基于字符、字符串和模式的拆分的区别。尽管如此,在测试中,除了在斜杠上拆分使用引号 ( split '/', $some_string)更好之外,我没有发现更多差异。
我今天的具体问题是在点上拆分文件名.并期望在字符串模式上拆分。令我惊讶的'.'是,该模式仍被视为正则表达式,因此以下脚本无法实现此目的:
use strict; use warnings; use 5.010;
my ( @x ) = split '.', 'dir/some_file.ext';
say "@x";
Run Code Online (Sandbox Code Playgroud)
我知道,如何修复我的脚本(使用正则表达式模式),但我仍然不知道,使用模式作为字符串 ( '.') 与使用正则表达式 ( /./) 有什么区别?
我尝试eval输出Dumper非常简单的 hashref,其中两个键具有相同的值(引用另一个哈希):
#!/usr/bin/env perl
use strict; use warnings;
use Data::Dumper;
my $foo = { data => 1 };
my $boo = {
x => $foo,
y => $foo,
};
my $VAR1;
my $bar = eval( Dumper( $boo ) );
print Dumper( $boo );
print Dumper( $bar );
Run Code Online (Sandbox Code Playgroud)
我希望$booand$bar具有相同的结构,但 eval 似乎没有$VAR1->{'x'}正确解决内部引用,我希望最后两行打印相同的字符串:
$VAR1 = {
'x' => {
'data' => 1
},
'y' => $VAR1->{'x'}
};
Run Code Online (Sandbox Code Playgroud)
但是第二个有x或y未定义(取决于以字面形式引用的内容):
$VAR1 …Run Code Online (Sandbox Code Playgroud)