免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5102 | 回复: 9
打印 上一主题 下一主题

关于undef和""的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-05-30 14:12 |只看该作者 |倒序浏览
sub Pro_biz_checkbox {
my(@class,@style,@level,$num, $string_class,$string_level,$string_style,$string); #这个语句如果换成下面这个语句

#my(@class,@style,@level,$num, $string_class,$string_level,$string_style,$string)=undef或则是"";都会取不到@class中的第一个数组元素.
foreach my $temp_values (keys%$FORM) { # 得到用户选择的
my $count=0;
for(@{$group->;[1]}) {
if ($temp_values eq $group->;[1]->;[$count]) { # 取出用户选择的数据
if ($temp_values=~/Biz_cate/) {
push(@class,$temp_values); # 分类
}elsif($temp_values=~/Biz_key4/){
push(@style,$temp_values); # 类型
}else{
push(@level,$temp_values); # 级别
}
}
$count++;
}
}
# 根据用户选择的生成SQL语句 --分类生成
$string_class=&Build_saith(\@class);
# 根据用户选择的生成SQL语法 --类型生成
#$string_style=&Build_saith(\@style);
# 根据用户选择的生成SQL语法 --级别生成
#$string_level=&Build_saith(\@level);
# 最后对生成的SQL语句进行检查
...

...

....

....
return \$string;
}
# 对用户选择的单字段进行SQL生成
sub Build_saith {
my $user_info=shift;
my ($num)=undef;
my ($string)=" (";
$num=@$user_info;
#print $num;
my $count=0;
for(@$user_info){  #这里进行调试,发现如果使用undef或"";对@class进行了初始化的话,那么将得不到$user->;[0]这里的数据。/
print "$count =>; ";
print $_,"<br>;";
$count++;
print "<br>;";
}
........

...........
.........
for(@$user_info){
my @info=split(/-/,$FORM->;{$_});
$string.=join_sql(\@info,$_);
}
$string=" ";
return \$string;
}
sub join_sql { #

.....

...

..

.

..

}
不清楚什么样原因造成的?perl bug?还是程序本身有问题?

搞了半天也没想通。不能不对其进行undef和"";操作了。

系统环境:

red hat 9.0 /mod_perl 1.99

论坛徽章:
0
2 [报告]
发表于 2004-05-30 14:29 |只看该作者

关于undef和""的问题

参数传递给 &Build_saith 时先检查 @class , 是不是为空 ?  print 来 debug .

另外,

my($a,$b,$c) = undef; 并不是给所有变量赋值.

论坛徽章:
0
3 [报告]
发表于 2004-05-30 16:00 |只看该作者

关于undef和""的问题

my($a,$b,$c) = undef;?
只是给第一个?
@class里不是空值。

论坛徽章:
0
4 [报告]
发表于 2004-05-30 16:02 |只看该作者

关于undef和""的问题

我感觉即使是第一个的话,那么可能也是perl这里处理有问题。
我第一次是给他undef了。但是经过push后@class里的第一个元素也不应该是空啊?

论坛徽章:
0
5 [报告]
发表于 2004-05-30 22:47 |只看该作者

关于undef和""的问题

如果没有 undef 就没问题么?  

$string_class=&Build_saith(\@class);
call 这个之前 @class 是空?

sub Build_saith {
my $user_info=shift;

这时的 $user_info 是空 ?

传递前和之后两个一致么?  

另外看看你的 apache error_log.

慢慢 debug 吧. 但我想不会是 perl 的问题. 只会是你的程序处理时什么地方没有留意.

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
6 [报告]
发表于 2004-05-31 08:29 |只看该作者

关于undef和""的问题

my(@class,@style,@level,$num, $string_class,$string_level,$string_style,$string); #这个语句如果换成下面这个语句

#my(@class,@style,@level,$num, $string_class,$string_level,$string_style,$string)=undef或则是"";都会取不到@class中的第一个数组元素.
==============================
這當然會有問題...
因為你前面是list ...
my() = $var;
後面只有一個element..
所以$class[0] 被undef了......
自然數值就不會出現了....
你要初始化..要用
my @class=();
my @style=();
這樣子......不要偷懶了...

论坛徽章:
0
7 [报告]
发表于 2004-05-31 13:15 |只看该作者

关于undef和""的问题

原帖由 "apile" 发表:
ef了......
自然數值就不會出現了....
你要初始化..要用
my @class=();
my @style=();
這樣子......不要偷懶了...
sub Pro_biz_checkbox {
                my(@class,@style,@level,$num, $string_class,$string_level,$string_style,$string);
                foreach my $temp_values (keys%$FORM) { # 得到用户选择的
                                my $count=0;
                                for(@{$group->;[1]}) {
                                        if ($temp_values eq $group->;[1]->;[$count]) {
                                                        if ($temp_values=~/Biz_cate/) {
                        #问题在这里,即使我前面的undef使用的不对,但是这里我使用push也是向其里面push新值了啊?难道perl认为undef后的也是值,把新的值放到undef的后面?,我想还是perl本身有问题,或则我没有明白其这部分的规则。因为undef不能算做正式的值啊?能吗?                                        push(@class,$temp_values);                                                          }elsif($temp_values=~/Biz_key4/){
                                                                        push(@style,$temp_values);                                                           }else{
                                                                        push(@level,$temp_values);                                                        }
                                        }
                                $count++;
                                }
                }
       
                $string_class=&Build_saith(\@class,"class";
       
                $string_style=&Build_saith(\@style,"style";

                $string_level=&Build_saith(\@level,"level";

...............
..........
.......
}
sub Build_saith {
                my $user_info=shift;
                my $type=shift;
                $num=@$user_info;
                                print $user_info->;[0]; # 使用undef的情况下。此为空值
                                             # 不使用undef的情况下非空值

...
...
....

论坛徽章:
0
8 [报告]
发表于 2004-05-31 13:18 |只看该作者

关于undef和""的问题

原帖由 "Qiang" 发表:
如果没有 undef 就没问题么?  

$string_class=&Build_saith(\@class);
call 这个之前 @class 是空?

sub Build_saith {
my $user_info=shift;

这时的 $user_info 是空 ?

传递前和之后两个一致么?  ..........

程序没有输出错误,因为只是得不到$class[0];或则说$class[0]为一个空值。我停纳闷的。怎么会这样的。我现在明白了一点就是好象undef被作为@class的第一个值了。而后在push,会把第一个新值放到undef后面?

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
9 [报告]
发表于 2004-05-31 13:32 |只看该作者

关于undef和""的问题

你的想法沒錯...

push..會把數值加在最後一個有值的的後面..
老話一句..
array要清空不要用 = undef...
要用
@ary =();
or
undef @ary;

而variable則用
$var = ""  or
undef $variable;

前面可能有點講錯..sorry..

undef是個function.......
@list = undef;
@list 中的第一個element
就被undef了...也就是說略過....注意看看
perldoc -f undef 內容.....
所有@list中個element都從第二個開始...而不是第一個..

應該是這樣子才對...

论坛徽章:
0
10 [报告]
发表于 2004-05-31 16:55 |只看该作者

关于undef和""的问题

[quote]原帖由 "apile"]你的想法
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP