Darwin Streaming Server 安装问题 os x
Darwin Streaming Server install problems os x
我的问题和回答中提到的一样。我一直在努力理解代码,这就是我学到的:
在文件 parse_xml.cgi 中失败,尝试从名为 messages[= 的文件中获取消息 (return $message{$name}
) 42=](位于 html_en 目录中)。
$messages 值来自文件 adminprotocol-lib.pl:
中的方法 GetMessageHash
sub GetMessageHash
{
return $ENV{"QTSSADMINSERVER_EN_MESSAGEHASH"}
}
$ENV{"QTSSADMINSERVER_EN_MESSAGEHASH"}
设置在文件streamingadminserver.pl:
$ENV{"QTSSADMINSERVER_EN_MESSAGEHASH"} = $messages{"en"}
我对 Perl 一无所知,所以我不知道问题出在哪里,因为我看到的 $messages{"en"}
具有正确的值(如果我这样做 print($messages{"en"}{'SunStr'}
我得到值 "Sun")).
但是,如果我尝试做 print($ENV{"QTSSADMINSERVER_EN_MESSAGEHASH"}{'SunStr'}
,我什么也得不到。好像 $ENV{"QTSSADMINSERVER_EN_MESSAGEHASH"}
没有设置
我试过这个简单的例子,效果很好:
$ENV{"HELLO"} = "hello";
print($ENV{"HELLO"});
它工作正常,打印 "hello"。
知道问题出在哪里吗?
看起来 $messages{"en"}
是一个 HashRef:指向保存键值存储的某个内存地址的指针。您甚至可以打印关联的内存地址:
perl -le 'my $hashref = {}; print $hashref;'
HASH(0x1548e78)
0x1548e78是地址,但只在同一个运行ning进程内有效。重新运行示例命令,每次你都会得到不同的地址。
HASH(0x1548e78) 也只是真实存储值的人类可读表示。设置 $hashref2="HASH(0x1548e78)";
不会创建真正的引用,只是人类可读字符串的副本。
您可以在两个脚本中使用 print $ENV{"QTSSADMINSERVER_EN_MESSAGEHASH"}
轻松证明这一理论。
Data::Dumper通常用于显示引用哈希(内存位置)的内容:
use Data::Dumper;
print Dumper($messages{"en"});
# or
print Dumper($ENV{"QTSSADMINSERVER_EN_MESSAGEHASH"});
这还将显示 pointer/reference 是否可以在两个脚本中取消引用。
您的问题的解决方案可能是传递值而不是 HashRef:
$ENV{"QTSSADMINSERVER_EN_SUN"} = $messages{"en"}->{SunStr};
最佳做法是在两个键之间使用 ->。键的 " 或 ' 引号也是 optional if the key is a plain word.
但是通过环境变量传递所有东西感觉不对。他们可能无法保留对 OSX 的引用(我不知道)。您可能希望将字符串存储提取到包含文件并通过 require.
加载它
有关 Perl 的更多信息,请参阅 http://www.perlmaven.com/ or http://learn.perl.org。
修复代码:
$$ENV{"QTSSADMINSERVER_EN_MESSAGEHASH"} = $messages{"en"};
sub GetMessageHash
{
return $$ENV{"QTSSADMINSERVER_EN_MESSAGEHASH"};
}
我的问题和
在文件 parse_xml.cgi 中失败,尝试从名为 messages[= 的文件中获取消息 (return $message{$name}
) 42=](位于 html_en 目录中)。
$messages 值来自文件 adminprotocol-lib.pl:
GetMessageHash
sub GetMessageHash
{
return $ENV{"QTSSADMINSERVER_EN_MESSAGEHASH"}
}
$ENV{"QTSSADMINSERVER_EN_MESSAGEHASH"}
设置在文件streamingadminserver.pl:
$ENV{"QTSSADMINSERVER_EN_MESSAGEHASH"} = $messages{"en"}
我对 Perl 一无所知,所以我不知道问题出在哪里,因为我看到的 $messages{"en"}
具有正确的值(如果我这样做 print($messages{"en"}{'SunStr'}
我得到值 "Sun")).
但是,如果我尝试做 print($ENV{"QTSSADMINSERVER_EN_MESSAGEHASH"}{'SunStr'}
,我什么也得不到。好像 $ENV{"QTSSADMINSERVER_EN_MESSAGEHASH"}
没有设置
我试过这个简单的例子,效果很好:
$ENV{"HELLO"} = "hello";
print($ENV{"HELLO"});
它工作正常,打印 "hello"。
知道问题出在哪里吗?
看起来 $messages{"en"}
是一个 HashRef:指向保存键值存储的某个内存地址的指针。您甚至可以打印关联的内存地址:
perl -le 'my $hashref = {}; print $hashref;'
HASH(0x1548e78)
0x1548e78是地址,但只在同一个运行ning进程内有效。重新运行示例命令,每次你都会得到不同的地址。
HASH(0x1548e78) 也只是真实存储值的人类可读表示。设置 $hashref2="HASH(0x1548e78)";
不会创建真正的引用,只是人类可读字符串的副本。
您可以在两个脚本中使用 print $ENV{"QTSSADMINSERVER_EN_MESSAGEHASH"}
轻松证明这一理论。
Data::Dumper通常用于显示引用哈希(内存位置)的内容:
use Data::Dumper;
print Dumper($messages{"en"});
# or
print Dumper($ENV{"QTSSADMINSERVER_EN_MESSAGEHASH"});
这还将显示 pointer/reference 是否可以在两个脚本中取消引用。
您的问题的解决方案可能是传递值而不是 HashRef:
$ENV{"QTSSADMINSERVER_EN_SUN"} = $messages{"en"}->{SunStr};
最佳做法是在两个键之间使用 ->。键的 " 或 ' 引号也是 optional if the key is a plain word.
但是通过环境变量传递所有东西感觉不对。他们可能无法保留对 OSX 的引用(我不知道)。您可能希望将字符串存储提取到包含文件并通过 require.
加载它有关 Perl 的更多信息,请参阅 http://www.perlmaven.com/ or http://learn.perl.org。
修复代码:
$$ENV{"QTSSADMINSERVER_EN_MESSAGEHASH"} = $messages{"en"};
sub GetMessageHash
{
return $$ENV{"QTSSADMINSERVER_EN_MESSAGEHASH"};
}