我的第一印象readFile是它的便利性和它让文件描述符打开时间超过需要的可能性之间的权衡,没有办法关闭它们.作为一个实验,我尝试了以下(非常实用的)程序,认为它可能会通过尝试维护一千个打开的文件描述符来阻塞:
main = do
mapM_ (\idx -> readIt) [1..1000]
where readIt = do
contents <- readFile "/etc/passwd"
putChar $ head contents
Run Code Online (Sandbox Code Playgroud)
但它实际上在回收文件描述符方面做得非常好; 计数永远不会超过70左右:
open("/etc/passwd", O_RDONLY|O_NOCTTY|O_NONBLOCK|O_LARGEFILE) = 4
open("/etc/passwd", O_RDONLY|O_NOCTTY|O_NONBLOCK|O_LARGEFILE) = 5
open("/etc/passwd", O_RDONLY|O_NOCTTY|O_NONBLOCK|O_LARGEFILE) = 6
open("/etc/passwd", O_RDONLY|O_NOCTTY|O_NONBLOCK|O_LARGEFILE) = 7
...
open("/etc/passwd", O_RDONLY|O_NOCTTY|O_NONBLOCK|O_LARGEFILE) = 65
open("/etc/passwd", O_RDONLY|O_NOCTTY|O_NONBLOCK|O_LARGEFILE) = 66
close(3) = 0
close(4) = 0
close(5) = 0
...
close(54) = 0
close(55) = 0
close(56) = 0
open("/etc/passwd", O_RDONLY|O_NOCTTY|O_NONBLOCK|O_LARGEFILE) = 3
open("/etc/passwd", O_RDONLY|O_NOCTTY|O_NONBLOCK|O_LARGEFILE) = 4
Run Code Online (Sandbox Code Playgroud)
这是怎么回事?是仅仅contents获得GC …
我想使用一种行为类似于简单的对列表[(a,b)]作为字典的类型,将类型的键映射到类型a的值b,同时保持"用户指定的",定义键的顺序.(就像普通列表一样 - 我希望能够"附加"一个项目,然后将其识别为"最后一个元素".)但是我希望在键上进行随机访问查找,而不是线性性能,即Data.Map提供什么.除了定义其顺序的键列表之外,一种选择是仅维护普通映射:
data OrderedDict a b = OrderedDict (Map a b) [a]
Run Code Online (Sandbox Code Playgroud)
然后定义append使两个密钥集合保持同步的操作等.虽然维护两个相同密钥的独立集合似乎很难看.是否有现成的数据类型已经将有序键与按键进行有效的随机访问查找相结合?
我正在研究base.pmPerl发行版的来源,我看不出它与"非实用"模块的区别.如果use base是"pragma",它与任何模块的use Foo位置Foo有什么不同?
我基本上试图从表示树结构的多维数组构建一个html ul/li嵌套列表.
以下代码工作正常,但我想改进它:
我需要一种方法来跟踪递归级别,以便我可以将不同的类应用于不同的级别,为生成的输出添加缩进等.
function buildTree($tree_array, $display_field, $children_field, $class='', $id='') {
echo "<ul>\n";
foreach ($tree_array as $row) {
echo "<li>\n";
echo $row[$display_field] . "\n";
if (isset($row[$children_field])) {
$this->buildTree($row[$children_field]);
}
echo "</li>\n";
}
echo "</ul>\n";
}
Run Code Online (Sandbox Code Playgroud)
$ tree_array如下所示:
Array
(
[0] => Array
(
[category_id] => 1
[category_name] => calculatoare
[parent_id] => 0
[children] => Array
(
[0] => Array
(
[category_id] => 4
[category_name] => placi de baza
[parent_id] => 1
)
[1] => Array
(
[category_id] => 5
[category_name] …Run Code Online (Sandbox Code Playgroud) 我在某种程度上理解桥梁模式.我理解接口和实现的分离.它使用类似插件的实现者类,它保存派生类实现的实际逻辑.
但有人可以解释它如何允许接口和派生独立发展?如果我想向接口添加一个新方法,它必须在派生类中实现,它将修改它.
其次,必须修改客户端代码以在需要新对象时设置新的实现者.
给出我的环境背景:
我有3台机器A,B和C.
A = Webserver,运行一个php网站,它基本上充当B&C的界面
B = Linux Ubuntu机器,我有root访问权限,SSH以及通过SSH客户端在机器上工作所需的所有优点(我有一个用于此服务器的.ppk私钥文件)
C =在Linux上运行的MySql数据库服务器
我可以在C(Mysql)上成功执行来自A(php)的查询并返回结果.但是现在我试图在A上从B执行linux命令
例如.
我有一个在B上运行的脚本,并希望从A(php)执行命令以显示脚本的状态.
在命令行中执行此操作很简单 - ./SomeScript状态
但我想在服务器A上托管的网站上显示此脚本的状态.
甚至只检查服务器A上服务器B的正常运行时间.
无论如何这是可能的.我已经google了看似永远,但我没有得到任何地方,如果连接是安全的,我不会分阶段,因为这是一个没有外部访问该网络的封闭网络.
任何建议将受到高度赞赏.
谢谢
我试图将此行为归结为最简单的测试用例.考虑以下两个模块:
package Bar;
use base 'Exporter';
use vars qw/ $BarVar /;
BEGIN { @EXPORT_OK = qw/ $BarVar /; }
$BarVar = 'original';
1;
Run Code Online (Sandbox Code Playgroud)
package Foo;
use Bar qw/ $BarVar /;
sub foo { print $BarVar . "\n"}
1;
Run Code Online (Sandbox Code Playgroud)
现在,以下脚本的输出 -
use strict;
use warnings;
use Foo;
{
local $Bar::BarVar = 'modified';
Foo::foo();
}
Foo::foo();
Run Code Online (Sandbox Code Playgroud)
是"原始"打印两次,我希望它被"修改"后跟"原始",因为我本来期望local声明$Bar::BarVar在整个范围内替换包变量,其中包括第一次调用foo().解释是什么?我怎样才能在当地覆盖$Bar::BarVar?
基本上我正在寻找相当于gdb的"up"和"down"命令的perl.如果我打破子程序bar,我有一个看起来像这样的调用堆栈:
foo
\
baz
\
bar
Run Code Online (Sandbox Code Playgroud)
我希望能够(没有从bar或返回baz)导航foo框架并通过操纵变量来查看它正在做什么,因为我通常会使用p或的参数x.
使用"+"运算符增加日期(或日期时间)时,如何指定增量以天(或月,或几周或几年)为单位?
> Sys.Date()
[1] "2013-08-23"
> Sys.Date() + 1
[1] "2013-08-24"
> ISOdate(2013,8,23)
[1] "2013-08-23 12:00:00 GMT"
> ISOdate(2013,8,23) + 1
[1] "2013-08-23 12:00:01 GMT"
Run Code Online (Sandbox Code Playgroud) 我有时会遇到变量有意义的情况const,但仅限于其范围的后半部分.例如,块的第一部分可能设置值,如果很明显我们已经"完成"设置该变量,则其余部分的可读性可能会提高 -
void foo() {
int n;
// Do things that result in initialization of n
freeze n; // Imaginary construct that declares "n" const for rest of scope
// Later steps that depend on 'n' but do not change it
}
Run Code Online (Sandbox Code Playgroud)
有没有捕获这种模式的C++习语?当然,块的后半部分可以移动到一个单独的功能,但是可以在不移动任何东西的情况下完成吗?