免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: buypro9
打印 上一主题 下一主题

如果将string转换成array of hashes 字符串转数组??? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-08-10 14:37 |只看该作者

回复 #10 buypro9 的帖子

desc  => ''

值为空,即undef

desc  => ' '

值为空格

如果是desc  => ''  我还是得到undef

如果在值为空的情况下你不想得到undef,那么就做个判断,然后给这个value赋一个你指定的默认值

以后loop的时候  key和value又会匹配错了。

不会啊,你运行一下我上面改的例子,key和value没有匹配错

论坛徽章:
0
12 [报告]
发表于 2009-08-10 15:39 |只看该作者
老大。发觉还是有点问题。
看起来一样。可两段程序接上我后办段的foreach loop后


支持中文的感觉发生了value和key匹配错误。 (注 dump 结果看起来正确。 foreach 执行后用正确。可一但放入tempalate感觉就是发生了value和key匹配错误。 怎么回事啊。


那段不支持中文和空值的。则可以顺利运行。 可就是无法有空格和支持中文。  


我感觉是改后数据源变了即array_of_hash变了。可能哪里多了空格或因素。能再替我看看吗?

论坛徽章:
0
13 [报告]
发表于 2009-08-10 16:15 |只看该作者

回复 #12 buypro9 的帖子

支持中文的感觉发生了value和key匹配错误。 (注 dump 结果看起来正确。 foreach 执行后用正确。可一但放入tempalate感觉就是发生了value和key匹配错误。 怎么回事啊。

什么叫“感觉发生了错误”?如果有错误,把出错信息和情况贴上来吧。

在value中不存在中文、空格、空值的情况下,我写的和你帖的代码得到的结果是一样。所以我估计,即使真的有问题,很大可能是你后面的程序处理中没有考虑到hash的value中存在中文、空格、空值的情况,你检查看看

论坛徽章:
0
14 [报告]
发表于 2009-08-10 16:24 |只看该作者

回复 #8 buypro9 的帖子

@a = eval $str; 也不行的。 返回空白页


eval可以啊,怎么说不行?
  1. use strict;
  2. use warnings;
  3. use Data::Dumper;

  4. my $string = q({file => 'file         1', desc  => ''}, {file => 'file1中文', desc22 => 'desc22we'});
  5. my @arr = eval $string;
  6. print Dumper(\@arr);
复制代码

论坛徽章:
0
15 [报告]
发表于 2009-08-10 19:24 |只看该作者
老大,你好。

我意思是

我同样采用两段代码

dumping得结果看起来都一样。


都接上后半段程序。 其实就是一个foreach loop 然后采用了 tempate 在html直接显示处 <%des%>等的值

我测试了一下。如果单就 foreach loop  然后采用 print。结果也正确
但是我需要采用template .结果显示出   <%des%> 不存在。唯一的原因就是没定义过。也就是可能我说得key 和value 匹配错了。


当然是推测而已。  另一个原因导致我怀疑是你的程序问题,是如果我直接定义一个 array of hash 其中也含有中文 空格什么的。结果
可以顺利得到我想要得结果。所以我推断可能输入到foreach loop的数据源有问题。  可到底问题出在哪,一下找不到没方向了。

我只是采用了简单替代法推断以上结论的。 正在慢慢比较。不好意思菜鸟。速度非常慢。

论坛徽章:
0
16 [报告]
发表于 2009-08-10 20:39 |只看该作者

回复 #8 buypro9 的帖子

因为原文的串不符合perl语法 少了个' ...........

论坛徽章:
0
17 [报告]
发表于 2009-08-11 11:16 |只看该作者
正常的用CGI session + mysql 方法如下

在mysql里

  1. CREATE TABLE sessions (
  2.      id CHAR(32) NOT NULL PRIMARY KEY,
  3.      a_session TEXT NOT NULL
  4.   );
复制代码


CGI session 处理

  1. use CGI;
  2. use CGI::Session;

  3. my $cgi = new CGI;
  4. my $s = new CGI::Session( 'driver:mysql', $cgi, { DataSource  => 'dbi:mysql:test',
  5.                                                    User       => '****',
  6.                                                   Password    => '****' });

  7. my $id = $s->param('file','gogoggog');    ##  存入值  你的file file1 就在这儿设定

  8. my $file = $s->param('file');  ## 取出
复制代码





数据库中 id 和  变量存储样例

  1. | e9f96737e511c8657008d08cddf35832 | $D = {'_SESSION_ID' => 'e9f96737e511c8657008d08cddf35832','_SESSION_ATIME' => 1249959769,'file' => 'gogoggog','_SESSION_REMOTE_ADDR' => '127.0.0.1','_SESSION_CTIME' => 1249959769};;$D |
复制代码

论坛徽章:
0
18 [报告]
发表于 2009-08-11 11:23 |只看该作者

回复 #17 hitsubunnu 的帖子

hitsubunnu 你好。谢谢关注。


CGI::Session; 我暂时无法使用。因为需要改动的主程序得地方太多了。

我暂时采用手工倒数据了。等以后有空了在研究。


主程序是linksql  自己有一套自己的module . 我都不值得从何处着手整合呢。 对我来说太复杂了

论坛徽章:
0
19 [报告]
发表于 2009-08-11 11:36 |只看该作者
原帖由 buypro9 于 2009-8-11 11:23 发表
hitsubunnu 你好。谢谢关注。


CGI::Session; 我暂时无法使用。因为需要改动的主程序得地方太多了。

我暂时采用手工倒数据了。等以后有空了在研究。


主程序是linksql  自己有一套自己的module . 我 ...

整合 可以参考 CGI::Session:: Driver 规范

按照原来规则 直接写个driver 也许会起到事半功倍的效果
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP