小编nic*_*ick的帖子

如何在Template Toolkit中处理包含非法标识符字符的哈希键?

在Template Toolkit中,如果我有以下包含hashref的变量:

[% 
   artist = {
     'life-span' => '1975 to 1987',
   }
%]
Run Code Online (Sandbox Code Playgroud)

在"寿命"中输出数据的最佳方法是什么?

我试过了...

[% artist.life-span %]
Run Code Online (Sandbox Code Playgroud)

^因连字符而失败.

[% artist.'life-span' %]
Run Code Online (Sandbox Code Playgroud)

^这会失败,因为语法不正确.

[% lifespan = 'life-span' %]
[% artist.$lifespan %]
Run Code Online (Sandbox Code Playgroud)

^这有效,但在具有大量数据的大型应用程序中不切实际.

有没有更好的办法?

我正在研究的项目是基于Catalyst的Web应用程序,数据来自许多不同的外部Web服务,因此我不控制哈希键的名称.我想我可以预先处理Perl中的数据,在将它提供给TT之前重命名问题哈希键,但这似乎是一个非常糟糕的解决方法.

perl catalyst template-toolkit

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

如何在HSV颜色空间中插入色调值?

我正在尝试在HSV颜色空间中插入两种颜色之间以产生平滑的颜色渐变.

我正在使用线性插值,例如:

h = (1 - p) * h1 + p * h2
s = (1 - p) * s1 + p * s2
v = (1 - p) * v1 + p * v2
Run Code Online (Sandbox Code Playgroud)

(其中p是百分比,h1,h2,s1,s2,v1,v2是两种颜色的色调,饱和度和值分量)

这对s和v产生了良好的结果,但对于h则没有.由于色调分量是一个角度,计算需要计算出h1和h2之间的最短距离,然后沿正确的方向(顺时针或逆时针)进行插值.

我应该使用什么公式或算法?


编辑:通过遵循杰克的建议我修改了我的JavaScript渐变功能,它运作良好.对于任何有兴趣的人,这是我最终得到的:

// create gradient from yellow to red to black with 100 steps
var gradient = hsbGradient(100, [{h:0.14, s:0.5, b:1}, {h:0, s:1, b:1}, {h:0, s:1, b:0}]); 

function hsbGradient(steps, colours) {
  var parts = colours.length - 1;
  var gradient = new Array(steps);
  var …
Run Code Online (Sandbox Code Playgroud)

javascript interpolation gradient colors hsv

15
推荐指数
2
解决办法
8011
查看次数

我的所有Moose类都必须包含'namespace :: autoclean'和'make_immutable',或者是否有某种方法可以默认获取这些?

根据Moose最佳实践文档,我的Moose类应该如下所示:

package Person;

use Moose;
use namespace::autoclean;

# extends, roles, attributes, etc.

# methods

__PACKAGE__->meta->make_immutable;

1;
Run Code Online (Sandbox Code Playgroud)

请参阅Moose :: Manual :: BestPractices.

99%的时间这是我想要的,所以有没有办法让我的命名空间自动清理,我的类默认为不可变,所以我不必让这个代码混乱?

也许有一个技术上的原因,为什么它不可能或为什么不应该这样做?

谢谢

perl moose

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

如何编写Perl脚本来提取Perl包中每个子例程的源代码?

给出一个Perl包Foo.pm,例如

package Foo;

use strict;

sub bar {
    # some code here 
}

sub baz {
    # more code here 
}

1;
Run Code Online (Sandbox Code Playgroud)

如何编写脚本来提取每个sub的文本源代码,从而产生一个哈希:

$VAR1 = {
    'bar' => 'sub bar {
        # some code here 
    }',
    'baz' => 'sub baz {
        # more code here 
    }'
};
Run Code Online (Sandbox Code Playgroud)

我希望文本与包,空白和所有内容完全一致.

谢谢.

perl parsing extract package subroutine

6
推荐指数
2
解决办法
1149
查看次数

如何防止PerlTidy调整我的作业?

默认情况下,PerlTidy将在我的代码中排列分配.例如

PerlTidy改变了这个......

my $red = 1;
my $green = 2;
my $yellow = 3;
my $cyan = 4;
Run Code Online (Sandbox Code Playgroud)

......进入这...

my $red    = 1;
my $green  = 2;
my $yellow = 3;
my $cyan   = 4;
Run Code Online (Sandbox Code Playgroud)

我该如何防止这种情况发生?我已经搜索了手册,但我找不到解决方案.

谢谢!

perl perl-tidy

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

为什么在我的Spotify应用程序中取消对外部API的JSON请求?

我正在构建一个Spotify应用程序,它使用类似的URL从REST API中提取JSON数据

http://www.mydomain.com/api/command?option=value
Run Code Online (Sandbox Code Playgroud)

在我的Spotify应用清单中,我为API主机设置了所需的权限:

"RequiredPermissions": [ "http://*.mydomain.com" ]
Run Code Online (Sandbox Code Playgroud)

我还在我的API的响应头中配置了跨源资源共享.这是一个真实的例子:

Server: nginx/0.7.65
Date: Thu, 08 Dec 2011 09:07:16 GMT
Content-Type: application/json
Connection: keep-alive
X-Powered-By: Mojolicious (Perl)
Set-Cookie: mojolicious=eyJwcmVmcyI6e30sImZpbHRlcnMiOnsicGllciI6eyJzb3VyY2VzIjpbMjBdfSwiZWxlYyI6eyJzb3VyY2VzIjpbMTMsMTddLCJ4dGFncyI6WyJzaG9lZ2F6ZSJdLCJ0YWdzIjpbImVsZWN0cm9uaWMiXX0sInB1bmtkdWIiOnsieHRhZ3MiOlsicmVnZ2FlIl0sInRhZ3MiOlsicHVuayIsImR1YiJdfX0sImV4cGlyZXMiOjEzMjMzMzg4MzZ9--c6d6214525b5d56785eebc99217394a1; Version=1; Path=/; expires=Thu, 08 Dec 2011 10:07:16 GMT
Content-Length: 23381
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET
Access-Control-Allow-Headers: *

200 OK
Run Code Online (Sandbox Code Playgroud)

在Spotify中,在chrome inspector网络选项卡中,我看到请求被取消:

Name: command www.mydomain.net/api 
Method: GET 
Status Text: (canceled) 
Type: undefined 
Initiator: jquery-1.js:7180 (Script) 
Size Content: 13B (0B) 
Time Latency: 21ms (0.0 days)
Run Code Online (Sandbox Code Playgroud)

Chrome检查器快照

如果我在桌面上(在Spotify之外)在Chrome中运行我的应用,则请求不会被取消,一切都很好.

我究竟做错了什么?或者这可能是Spotify预览版中的一个错误(功能?)?

api json spotify cors

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

如何在MongoDB中按$ elemMatch排序?

在我的MongoDB数据库中,我有一系列产品.每个产品都包含数组中的发布信息,例如

{
  "name" : "foo",
  "release" : [{
      "region" : "GB",
      "active" : "Y",
      "date" : ISODate("2012-03-01T00:00:00Z")
    }, {
      "region" : "US",
      "active" : "Y",
      "date" : ISODate("2012-09-01T00:00:00Z")
    }, {
      "region" : "FR",
      "active" : "N",
      "date" : ISODate("2010-01-01T00:00:00Z")
    }]
}
Run Code Online (Sandbox Code Playgroud)

我想查找GB区域中活动版本的所有产品,并按GB发布日期对结果进行排序.

我尝试使用以下方法:

db.product.find(
  { "release" : { "$elemMatch" : { "region" : "GB", "active" : "Y" } } }
).sort({ "release.date" : 1 });
Run Code Online (Sandbox Code Playgroud)

这会找到正确的产品,但不会按匹配元素的发布日期排序(而是在数组的最小发布日期排序).

从我到目前为止所看到的,看起来像匹配元素的属性排序是不可能的,这是正确的吗?

是否可以使用聚合框架完成,如果是这样的话?

sorting mongodb aggregation-framework

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

什么是在Catalyst控制器中处理可选url参数的最佳方法?

例如:

我知道如何匹配www.domain.com/foo/21

sub foo : Path('/foo') Args(1) {
  my ( $self, $c, $foo_id ) = @_;
  # do stuff with foo
}
Run Code Online (Sandbox Code Playgroud)

但是如何匹配www.domain.com/foo/21www.domain.com/foo/21/bar/56

sub foo : <?> {
  my ( $self, $c, $foo_id, $bar_id ) = @_;
  # do stuff with foo, and maybe do some things with bar if present
}
Run Code Online (Sandbox Code Playgroud)

谢谢

更新: 根据Daxim的建议,我尝试使用:正则表达式

sub foo : Regex('foo/(.+?)(?:/bar/(.+))?') {
   my ( $self, $c ) = @_;
   my ( $foo_id, $bar_id ) = @{ $c->req->captures …
Run Code Online (Sandbox Code Playgroud)

perl catalyst

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