Perl格式:格式参数不够

时间:2015-01-30 16:37:22

标签: perl format

我目前无法格式化输出。我知道这可能是“不好的做法”,但使用格式是必需的。

我试图将从数据库中检索到的值打印到Netcool的SQL插入模板中。

我正在引用http://perldoc.perl.org/perlform.html来应用适当的变量,但我不确定为什么这不起作用。

以下是代码段:

129 foreach my $row (@{$rows}) {
130
131   $trigger_name         = removeNull($row->{triggername});
132   $trigger_group        = $row->{groupname};
133   $trigger_kind         = $row->{triggerkind};
134   $code_block           = $row->{codeblock};
135   $isDebugEnabled       = IntToLiteralBoolean($row->{debugenabled});
136   $isEnabled            = IntToLiteralBoolean($row->{isenabled});
137   $priority             = $row->{triggerpriority};
138   $comment_block        = $row->{commentblock};
139   $evaluate_block       = $row->{evaluateblock};
140   $bind_name            = $row->{bindname};
141   $condition_block      = $row->{conditionblock};
142   $declare_block        = $row->{declareblock};
143
144 #  my $sth_triggerType;
145
146   if($trigger_kind == 0) {
147     #database logic goes here
148     my $sql_getDatabaseFields = "select *
149                                  from catalog.database_triggers
150                                  where TriggerName = '$trigger_name'";
151
152     print "\n\nExtracting trigger: $trigger_name";
153     print "\nTriggerKind: Database, $trigger_kind";
154
155     my $sth_triggerType = $dbh->prepare($sql_getDatabaseFields);
156     $sth_triggerType->execute;
157     my $dbRows = $sth_triggerType->fetchall_arrayref({});
158
159     foreach my $row (@{$dbRows}) {
160       $event_order       = $row->{eventorder};
161       $event_op          = $row->{eventop};
162       $database_name     = $row->{databasename};
163       $table_name        = $row->{tablename};
164       $event_level       = $row->{eventlevel};
165       write;
166
167      # print "\nEvent Order: $event_order";
168      # print "\nEvent Op: $event_op";
169      # print "\nDatabase Name:$database_name";
170      # print "\nTable name:$table_name";
171      # print "\nEvent Level: $event_level";
172     }
173 format =
174
175 CREATE OR REPLACE TRIGGER @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
176                           $trigger_name
177 GROUP @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
178       $trigger_group
179 DEBUG @<<<<<<<<<<<<
180       $isDebugEnabled
181 ENABLED @<<<<<<<<<<<<
182       $isEnabled
183 PRIORITY @<<
184       $priority
185 COMMENT ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
186   $comment_block
187   ~~^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
188   $comment_block
189   ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
190   $comment_block
191   ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
192   $comment_block
193   ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
194   $comment_block
195   ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
196
197 begin
198   ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
199   $code_block
200   ~~^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
201   $code_block
202   ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
203   $code_block
204   ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
205   $code_block
206   ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
207   $code_block
208   ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
209   $code_block
210   ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
211   $code_block
212   ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
213   $code_block
214   ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
215   $code_block
216   ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
217   $code_block
218   ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
219   $code_block
220   ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
221   $code_block
222   ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
223   $code_block
224   ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
225   $code_block
226 end;
227 .

这是调试时的输出:

Extracting trigger: service_reinsert
Not enough format arguments at nc_trigger_extract.pl line 199.
 at nc_trigger_extract.pl line 199
        main::STDOUT called at nc_trigger_extract.pl line 165
Modification of a read-only value attempted at nc_trigger_extract.pl line 199.
 at nc_trigger_extract.pl line 199
        main::STDOUT called at nc_trigger_extract.pl line 165
Debugged program terminated.  Use q to quit or R to restart,

139:      $evaluate_block       = $row->{evaluateblock};
140:      $bind_name            = $row->{bindname};
141:      $condition_block      = $row->{conditionblock};
142==>b   $declare_block        = $row->{declareblock};
143
144     #  my $sth_triggerType;
145
146:      if($trigger_kind == 0) {
147         #database logic goes here
148:        my $sql_getDatabaseFields = "select *


    DB<2> x $code_block
    0  "\cJ\cIset old.LastReportAt = new.LastReportAt;\cJ\cJ\cIif ( old.CurrentState != new.CurrentState )\cJ\cIthen\cJ\cI\cIset old.CurrentState = new.CurrentState;\cJ\cI\cIset old.StateChange = new.StateChange;\cJ\cIend if;\cJ\cJ\cIif ( new.CurrentState = 0 )\cJ\cIthen\cJ\cI\cIset old.LastGoodAt = new.LastGoodAt;\cJ\cIelseif ( new.CurrentState = 1 )\cJ\cIthen\cJ\cI\cIset old.LastMarginalAt = new.LastMarginalAt;\cJ\cIelseif ( new.CurrentState = 2 )\cJ\cIthen\cJ\cI\cIset old.LastBadAt = new.LastBadAt;\cJ\cIend if;\cJ\c@"

 DB<4> x $comment_block
0  "Service processing for service.status\c@"
  DB<5> c

1 个答案:

答案 0 :(得分:0)

比较以下两个例子:

1)

my $code_block = "helloworld";
my $str = "mars";

format = 
  ^<<<<
  $str
begin
  ^<<<<
  $code_block
  ^<<<<
  $code_block
  ^<<<<
  $code_block
end;
.

write STDOUT;

--output:--
  mars
begin
  hello
  world

end;

2)

my $code_block = "helloworld";
my $str = "mars";

format = 
  ^<<<<
begin           #LINE 11
  ^<<<<
  $code_block
  ^<<<<
  $code_block
  ^<<<<
  $code_block
end;
.

write STDOUT;

--output:--
Modification of a read-only value attempted at 1.pl line 11.