小编w.k*_*w.k的帖子

为什么我不能使用插值变量作为varname?

不幸的是,我没弄明白,为什么$alfa仍然是空的:

use 5.014; 
no strict 'refs';

my $berta = 5;
my $gamma = 'berta';
my $alfa = ${$gamma};

say "'$alfa'";
Run Code Online (Sandbox Code Playgroud)

必须是非常简单的事情...我期待$alfa成为5这里.我错过了什么?

perl

3
推荐指数
1
解决办法
88
查看次数

为什么knockout.mapping在某些数据结构上失败?

使用knockout.mapping我尝试从JSON映射到ko-object.当我尝试使用带有映射选项的更高级解决方案时,我常常得到Uncaught TypeError: g is not a function.我试图弄清楚什么是问题,但我仍然感到困惑.

可以说我有一个非常简单的模型:

var data1 = { // works
  a: "a",
  b: [ 
    { b1: "v1" }, 
    { b2: "v2" } 
  ] 
};
Run Code Online (Sandbox Code Playgroud)

现在使用这个模型就像这样:

function viewModel ( data ) {
  var self = this;
  var a    = ko.mapping.fromJS( data, { observe: "a"} );

  return a;
}

var vm1 = viewModel( data1 ); // works
Run Code Online (Sandbox Code Playgroud)

我的模型中有两个属性(ab),但我只需a要是可观察的,而b应该只是复制到viewmodel.

遗憾的是,如果数据结构变得更深,它就不会那么好用:

var data1 = { // works
  a: "a",
  b: …
Run Code Online (Sandbox Code Playgroud)

javascript knockout-mapping-plugin knockout.js

3
推荐指数
1
解决办法
559
查看次数

如何强制FastCGI将表单数据编码为UTF-8,因为CGI.pm有选项?

试图在FastCGI下运行旧的CGI脚本.没有额外参数的打印可提供正确的输print $q->div( $q->param("text") )

但是当使用CGI方法的额外参数哈希打印出来时print $q->div( {-id=>"id"}, $q->param("text") ),它会破坏UTF-8形成的数据('õäöüžš' - >'ÃμÃÃÃÃÃÃÃüüžš

它只发生在CGI参数中,在脚本定义的变量中工作正常(例3和4).在普通的CGI(带有"-utf8"-flag)下,一切都很完美.

被称为FastCGI的示例脚本test.fcgi?text=õäöüžš应该给出四个相等的块:

#!/usr/bin/perl -w --

use strict;
use CGI::Fast qw(:all);
use locale;
use utf8;

BEGIN {
        binmode(STDIN);                       # Form data
        binmode(STDOUT, ':encoding(UTF-8)');  # HTML
        binmode(STDERR, ':encoding(UTF-8)');  # Error messages
}

my ($q) = ();
my $test = "õäöüžš";

while ($q = new CGI::Fast) {

        print $q->header(-type=>"text/html", -charset=>"utf-8"), 
                $q->start_html(-encoding=>"utf-8");

        print "1: ",
                $q->div(  $q->param('text') ),
                "<br />",
                "2: ",
                $q->div( {-id=>"id"},  $q->param('text') ),
                "<br />", …
Run Code Online (Sandbox Code Playgroud)

perl cgi fastcgi utf-8

2
推荐指数
1
解决办法
3798
查看次数

为什么这个Mojolicious websockets示例不起作用?

我已经尝试了一些简单的示例来尝试它们,但没有人适合我.这是一个WebSocket Mojolicious/DBI示例的示例

我在端口5000上使用plackup运行它,一切都应该正常工作.但是当我尝试添加一些我在终端上看到的记录时:

[Sat Mar  9 11:05:57 2013] [debug] GET /insert (Anonymojo).
[Sat Mar  9 11:05:57 2013] [debug] Template "not_found.development.html.ep" not found.
[Sat Mar  9 11:05:57 2013] [debug] Template "not_found.html.ep" not found.
[Sat Mar  9 11:05:57 2013] [debug] Rendering cached inline template.
[Sat Mar  9 11:05:57 2013] [debug] Rendering cached inline template.
[Sat Mar  9 11:05:57 2013] [debug] 404 Not Found (0.012583s, 79.472/s).
127.0.0.1 - - [09/Mar/2013:11:05:57 +0200] "GET /insert HTTP/1.1" 404 6440 "-" "-"
Run Code Online (Sandbox Code Playgroud)

当我在"/ insert"上定位浏览器时,我得到几乎相同的(exept UserAgent部分)结果.

在示例脚本中,定义了websockets路由,但它从未被命中: …

perl websocket mojolicious

2
推荐指数
1
解决办法
785
查看次数

为什么使用子查询进行 DELETE 比使用简单 ID 列表慢得多?

我想根据主键从中等大小(700K)表中删除大量行。认为,最好的方法应该使用SELECT-subquery 作为DELETE源列表。并在这里找到了具体的答案。问题是:它比使用两个单独的查询(首先选择 ID,然后从表中删除这些 ID)慢得多。为什么会这样?

我也做了简单的测试用例:

CREATE TABLE `xyz` (
  `xyzID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `col1` int(10) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`xyzID`)
) ENGINE=InnoDB;
Run Code Online (Sandbox Code Playgroud)

用百万条记录填充它,然后:

DELETE FROM xyz
WHERE xyzID IN
        (
        SELECT xyzID
        FROM
            (
                SELECT xyzID
                FROM xyz
                LIMIT 3000,1000
            ) a
        );
Query OK, 1000 rows affected (53.52 sec)
Run Code Online (Sandbox Code Playgroud)

删除 2000 行会使时间加倍:

Query OK, 2000 rows affected (1 min 48.25 sec)
Run Code Online (Sandbox Code Playgroud)

但是在没有子查询的情况下删除(首先进行选择)几乎不需要时间(此处由随机生成的 id 列表):

DELETE FROM test.xyz WHERE …
Run Code Online (Sandbox Code Playgroud)

mysql

2
推荐指数
1
解决办法
1786
查看次数

如何将值推入 jsonb 列中的 key[] 中?

jsonb在 Postgres 表中有这样的结构:{ "res": [123, 223] }并且我想将值推入res-array 中。我不知道数组上有多少个值以及jsonb_insert对位置进行操作,所以我尝试使用-1位置:

select jsonb_insert( '{"res": [123, 223]}', '{res,-1}', '333');
       jsonb_insert       
--------------------------
 {"res": [123, 333, 223]}
Run Code Online (Sandbox Code Playgroud)

这是行不通的。如何将新值推入数组末尾?

我正在使用 Postgres 9.6

postgresql jsonb

2
推荐指数
1
解决办法
294
查看次数

当列为空时,为什么 jsonb-functions 在更新时不起作用?

我有一个带有jsonb列的表,其中列的默认值为null. 现在,当我第一次尝试使用数据更新此列时,jsonb_set或者jsonb_insert我得到UPDATE 1了结果,但实际上,该列保持null.

我做了一个小测试用例:

CREATE SCHEMA test;
CREATE TABLE test.books (  
  book_id serial NOT NULL,
  data jsonb
);

INSERT INTO test.books (data) VALUES (null);
INSERT INTO test.books (data) VALUES ('{}');
Run Code Online (Sandbox Code Playgroud)

现在我更新两个新记录:

UPDATE test.books SET data = jsonb_set( data, '{zzz}', 'true', true) WHERE book_id = 1;
UPDATE test.books SET data = jsonb_set( data, '{zzz}', 'true', true) WHERE book_id = 2;
Run Code Online (Sandbox Code Playgroud)

结果:

# select * from test.books;
 book_id |                data …
Run Code Online (Sandbox Code Playgroud)

postgresql jsonb

2
推荐指数
1
解决办法
77
查看次数

为什么单词字符(\ w)在使用locale pragma下不匹配?

当我use locale,我的语言环境(et_EE.UTF-8)中的一些字符与之匹配时\w,我没有看到任何理由.

除了ASCII之外,爱沙尼亚还使用了六个字符:

õäöüšž

在我下面的测试脚本中,我使用$string了三个额外的特殊字符ð??(不属于爱沙尼亚字母).

use feature 'say';
use POSIX qw( locale_h );

{
  use utf8;
  my  $string = "õäöüšž ð??";
  binmode STDOUT, ":encoding(UTF-8)";
  say "nothing";
  say 'LOCALE: ', setlocale(LC_CTYPE), ' ', setlocale(LC_COLLATE);
  say 'UC: ', uc( $string );
  say 'SORT: ', sort( split(//, $string) );
  say $string =~ m/\w/g;
  say $string =~ m/\p{Word}/g;
  say '';
}

{
  use utf8;
  use locale;
  binmode STDOUT, ":encoding(UTF-8)";
  my  $string = "õäöüšž ð??";
  say "locale"; …
Run Code Online (Sandbox Code Playgroud)

sorting unicode perl locale utf-8

1
推荐指数
1
解决办法
272
查看次数

在将数据插入数据库时​​,为什么`state`不比`my`快?

在转换数据库的过程中,我尝试使用最佳/最快插入.AFAIK,惯用的大量插入应该准备语句处理程序,然后迭代数据插入它.像这样的东西:

my $sql = q|INSERT INTO test.table ( value ) VALUES ( ? ) |;  
my $sth = $dbh->prepare( $sql );  
for my $val ( 1 .. 1000000 ) {
  $sth->execute( $val );
}
Run Code Online (Sandbox Code Playgroud)

我认为在state-declarator 的帮助下我可以将这个例程重构为函数,如下所示:

sub sql_state {  
  my ( $val ) = @_;
  state $sql = q|INSERT INTO test.table ( value ) VALUES ( ? ) |;  
  state $sth = $dbh->prepare( $sql );  
  $sth->execute( $val ) 
    or die "State";  
}  
Run Code Online (Sandbox Code Playgroud)

所以现在$sql在所有插入过程中初始化一次,并且还$sth准备一次,这是增强的基础.

在迁移我的数据库期间,我觉得这种改进并没有像我希望的那样给我这样的胜利.然后我发现了一篇文章 …

mysql perl benchmarking dbi

1
推荐指数
2
解决办法
123
查看次数

如何在使用HTML :: Tree解析后将数据标记为UTF-8?

我写了一个脚本,我在UTF-8编码的HTML文件中啜饮,然后将其解析为树HTML::Tree.问题是解析后的字符串不再标记为UTF-8.

由于_utf8_on()不建议设置标志的方式,我正在寻找正确的方法.

我的简化代码示例:

#!/usr/bin/perl

use strict;
use warnings;
use 5.010;
use utf8::all;
use autodie;
use HTML::Tree;
use Encode qw/is_utf8/;

my $file = shift;
my $tree;

if ($file) {
    my $content = slurp_in( 'file' => $file );
    $tree = html_tree('content' => $content);
} else {
    die "no file";
}

my $title = $tree->look_down(_tag => 'title');
$title = $title->as_HTML('');

if ( is_utf8( $title ) ) {
    say "OK: $title";
} else {
    say "NOT OK: $title";
}

## …
Run Code Online (Sandbox Code Playgroud)

perl utf-8 html-parsing html-tree

0
推荐指数
1
解决办法
719
查看次数

如何在模块中使用main :: data?

在脚本中,我初始化几个处理程序并设置应该可用于单独模块中的函数的变量.这是使用它们(的最好方式$q,$dbh,%conf模块)?

伪模块示例:

package My::Module

sub SomeFunction (
    @data = $dbh->selectrow_array("SELECT * FROM Foo WHERE Bar = ?", undef, $conf{Bar} );
    return $q->p( "@data" );
)
1;
Run Code Online (Sandbox Code Playgroud)

伪脚本示例:

use CGI;
use DBI;
use My::Module;

our $q = new CGI;
our $dbh = some_connenction_function($dsn);
our %conf = ( Foo => 1, Bar => 2, Random => some_dynamic_data() );
Run Code Online (Sandbox Code Playgroud)

我明白使用main::命名空间会起作用,但是sholud是更清洁的方式吗?或不?

perl perl-module

0
推荐指数
1
解决办法
2646
查看次数