这是我正在处理的sqlite数据库应用程序的代码片段:
my $query = "select * from pins";
my $sth = $dbh->prepare($query) or die "Couldn't prep: $DBI::errstr";
$sth->execute or die "Exec problem: $DBI::errstr";
my $result = $sth->fetchall_arrayref();
my $names = $sth->{NAME} or die "Name failed: $DBI::errstr";
foreach my $row (@$res) {
# ... do some row-specific things
foreach my $cell (@$row) {
# ... do some cell-specific things
}
}
Run Code Online (Sandbox Code Playgroud)
查询触发就好了,实际上它会返回正确的结果.但是,由于某种原因,这条线,
my $names = $sth->{NAME} or die "Name failed: $DBI::errstr";
Run Code Online (Sandbox Code Playgroud)
失败.{NAME}永远不会返回我期望的arrayref.如果我把die子句删掉,它运行正常(当然,无论我在哪里使用$ name,都会抛出预期的"使用未初始化的值"警告).
是否有一些明显的原因我错过了{NAME}不会触发,因为查询工作得很好?
谢谢!
所以,我的基本设置是这样的:我有项目,限于不同的类.这些项目具有效果,也限于不同的类别.例如,我可能有一个只能由精灵操纵的物品,而另一个物品可能会被所有人操纵,但会为精灵提供特定的奖励/效果.
这是一个限制类:
public class Restriction {
private int _base_id = 0;
private bool _qualify = true;
public Restriction() { }
// ... Base_ID and Qualify getters and setters here
public virtual bool Check(int c) {
if(_qualify) { return c == _base_id; }
else { return c != _base_id; }
}
Run Code Online (Sandbox Code Playgroud)
Restriction类的子级可能是RaceRestriction,它只覆盖构造函数:
public RaceRestriction(reference.races r, bool qual) {
Base_ID = (int)r; Qualify = qual;
}
Run Code Online (Sandbox Code Playgroud)
reference.races r是参考文件中的枚举.这里的想法是我可以将这种"限制"语法扩展到我在参考文件中定义的任何类 - 所以我可以对种族,类,统计数据进行限制,无论我需要什么.
因此,当我定义(例如)一个项目时,这一切都会达到高潮,这个项目对谁可以装备有限制.
下面是Equipment类的一个片段,我在这里定义了一个设备供以后使用(希望它是可读的):
public Equipment() {
...
_master_equipment_list[1] = new Equipment {
Name …Run Code Online (Sandbox Code Playgroud)