今天我在Webex会议上用我写的一些Perl代码显示我的屏幕.我的老板突然告诉我,而其他人都在寻找并听说我必须从哈希和数组结构中删除尾随逗号,因为这是一个不好的做法.我说我不认为在Perl中这是一个不好的做法,但他坚持并让我删除那些逗号只是为了显示我的脚本在会议中运行.
我仍然认为在Perl中这不是一个坏习惯,但我可能是错的.我实际上发现它们非常方便且是一种很好的做法,因为它们阻止我添加新元素并忘记在过程中添加相应的逗号.
但是,我真的很想知道这是一个好的或坏的做法,能够向我的老板(如果他错了)展示好的论据,甚至是我的论据的良好来源.
那么,留下尾随逗号是不好的做法?
这是一个例子:
my $hash_ref = {
key1 => 'a',
key2 => 'b',
key3 => 'c',
};
my $array_ref = [
1,
2,
3,
];
Run Code Online (Sandbox Code Playgroud) 我在MySQL 5.6中有一些表在某些字段中包含大型二进制数据.我想知道我是否可以信任创建的转储,mysqldump并确保在通过FTP,SCP等系统传输转储文件时,这些二进制字段不会轻易损坏.另外,我是否应该强制此类系统将转储文件视为二进制传输而不是ascii?
提前感谢您的任何意见!
给定任何HTML元素是另一个元素的子元素并自动继承一系列CSS属性:如何将这些属性中的一个(或全部)设置为默认值?
例:
CSS:
.navigation input {
padding: 0;
margin: 0 30em;
}
Run Code Online (Sandbox Code Playgroud)
HTML
<div class="navigation">
Some text: <input type="text" name="one" />
More text: <input type="text" name="two" />
<!-- The next input, I want it to be as browser-default -->
<div class="child">
<input type="text" name="three">
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
在这里,通过浏览器默认我的意思是我希望它看起来就像没有CSS应用于该元素一样.
这里我使用一个input元素作为例子,但我在谈论任何一种元素.我不是问如何为该特定元素设置不同的CSS属性,我问的是如何将其重置为默认值.
不同的元素具有不同的默认属性,例如padding未设置时.例如,button具有0CSS 填充的a 将包装其文本而没有任何空格.您可以稍后将其填充设置为另一个值,但是如何将其设置为默认填充?
提前感谢您的任何意见!
我试图找出是否有办法在mod_perl 2下完成响应而不返回主处理程序.到目前为止,还没有在文档中找到方法.以下是我正在尝试实现的示例:
#!/usr/bin/perl
# This is some mod_perl handler
use strict;
use warnings;
use Apache2::Const ':common';
sub handler {
my $r = shift;
if ($r->method eq 'POST') {
# just to do something as example
do_post_response($r);
}
$r->content_type('text/plain');
print "Thank you, goodbye.";
return Apache2::Const::OK;
}
sub do_post_response {
my $r = shift;
unless (check_somthing()) {
# Suppose I find a situation that requires
# a different response than normal...
$r->content_type('text/plain');
print "We have a situation...";
$r->something_to_finish_the_request_immediatly(Apache2::Const::OK);
}
}
Run Code Online (Sandbox Code Playgroud)
在一个常规的Perl脚本中,单独运行或在mod_cgi下运行,我可以exit() …
众所周知,浏览器会接受无效的HTML并尽力使用它来理解它.如果您创建的网页仅包含以下代码:
<html>
<head>
<title>This is bad HTML</title>
<body>
<h1>Bad HTML</h2>
<p>This is a paragraph
</body>
Run Code Online (Sandbox Code Playgroud)
然后你会得到一个网页解析方式,显示一个可接受的视图.是否是您的意思,取决于每个浏览器对您的错误的理解.
对我来说,这就像Javascript可以写成这样:
if (some_var == 1) {
say_something("some text');
else {
do_something_else();
// END OF CODE
Run Code Online (Sandbox Code Playgroud)
其中,一个Javascript编译器用同样的努力来理解无效代码可以按照你的意思进行解析- 或者说它自己有意义,但毕竟是运行它.
我已经看过几篇关于"它是否值得编写有效的HTML?"这一问题的文章和问题.,对写有效 HTML 的优缺点提出了几点看法.然而,这真让我惊讶的是:
为什么浏览器首先接受无效的 HTML?
注意:以下问题不是更多的问题,而是一种方法,为我在这里提出的唯一问题提供背景:
为什么浏览器不严格?
他们为什么不拒绝错误无效代码,就像任何其他编程语言一样?(不是我称HTML为编程语言,但你明白了)
难道不会强迫所有开发人员编写HTML代码,在任何浏览器中都会被完全相同地解释吗?
如果浏览器拒绝解析无效标记,那么在任何地方以及想要在网络上发布内容的人都不会有效地产生有效标记吗?
如果这是出于历史原因和向后兼容性,那么当我们已经看到像adsense.google.com这样的网站拒绝与IE <v10的兼容性时,是否还有时间进行更改?
编辑:投票结束此问题的人,请重新考虑.这不是一个广泛的问题,也不是基于意见的问题.对于一个非常具体的主题,这是一个非常具体的问题,与编程世界完全相关,并且实际上可以通过真正了解它的人的真实答案来回答.谢谢.
我正在使用Perl模块的一部分创建一个大型CSV响应.服务器运行在Plack上,我远非专家.
目前我正在使用这样的东西发送回复:
$res->content_type('text/csv');
my $body = '';
query_data (
parameters => \%query_parameters,
callback => sub {
my $row_object = shift;
$body .= $row_object->to_csv;
},
);
$res->body($body);
return $res->finalize;
Run Code Online (Sandbox Code Playgroud)
但是,该query_data函数不是一个快速的函数,并检索大量的记录.在那里,我只是将每一行连接进去,$body并且在处理完所有行之后,发送整个响应.
我不喜欢这两个原因:首先,它需要大量的RAM才能$body被破坏.其次,在该方法完成工作并实际发送响应之前,用户看不到任何响应活动$res->body($body).
我试图在文档中找到答案,但没有找到我需要的东西.
我也试过调用$res->body($row_object->to_csv)我的回调部分,但似乎最终只发送了我做的最后一次调用$res->body,覆盖了所有以前的调用.
有没有办法发送Plack响应来刷新每行的内容,因此用户在收集数据时实时开始接收内容,而不必将所有数据累积到可靠的第一个?
提前感谢您的任何意见!
在对项目中一个非常模糊的错误进行了一些认真的调试之后,我能够得到这个简短的代码。一个没有死亡的死亡呼叫。
该问题仅在调用script.pl. 如果Class_A直接调用,则die调用会成功。
我们需要三个文件:
文件 1:script.pl
use strict;
use warnings;
use lib '.';
use Class_A;
# This should not execute. Class_A should die at loading time
print "We shouldn't get here. Class_A shoud not load and die.\n";
Run Code Online (Sandbox Code Playgroud)
文件 2:Class_A.pm
package Class_A;
use strict;
use warnings;
use Class_B;
# This code SHOULD die:
my $p = Class_B->new;
$p->do_something->die_now;
1;
Run Code Online (Sandbox Code Playgroud)
文件 3:Class_B.pm
package Class_B;
use strict;
use warnings;
sub new {
my $class = shift;
bless …Run Code Online (Sandbox Code Playgroud) 在Perl中,您可以为变量分配对另一个变量的引用,如下所示:
my @array = (1..10);
my $ref = \@array;
Run Code Online (Sandbox Code Playgroud)
而且,因为它是一个参考,你可以做这样的事情,这两个变量都会受到影响:
push @array, 11;
push @$ref, 12;
Run Code Online (Sandbox Code Playgroud)
并且两个变量都将包含1..12,因为它们都指向相同的空间.
现在,我想知道是否有任何方法可以做同样的事情,但从ref开始,然后将该引用分配给普通变量.例如:
my $ref = [1..12];
my @array = # something here that makes @array point to the same space $ref contains
Run Code Online (Sandbox Code Playgroud)
我知道我可以像这样分配它:
my @array = @$ref;
Run Code Online (Sandbox Code Playgroud)
但是,这是一份副本.如果我改变$ ref或@array,那些将是独立的改变.
有没有办法让@array指向与$ ref相同的变量?
我正在使用2个div,父母和孩子.父级的宽度为100%,其内容以文本对齐为中心.
子div应该具有零(或接近它)的宽度,并使用其内容自动扩展其宽度,同时仍然在父div中居中.例:
+------------ PARENT DIV ------------+
| |
| ..some content.. |
| |
| +--CHILD DIV--+ |
| |Inside child | |
| +-------------+ |
| |
+------------------------------------+
+------------ PARENT DIV ------------+
| |
| ..some content.. |
| |
| +------ CHILD DIV ------+ |
| |Inside child with more | |
| +-----------------------+ |
| |
+------------------------------------+
Run Code Online (Sandbox Code Playgroud)
如果我为子div添加固定宽度,我可以正确居中:
.parent {
width: 100%;
}
.child {
width: 100px;
margin-left: auto;
margin-right: auto;
}
Run Code Online (Sandbox Code Playgroud)
但这不是我需要的,我需要子div根据其内容扩展其宽度.所以我尝试使用float和nowrap: …