请大家帮忙看看,这个算法还可以再优化一下吗?我觉得我的办法有点笨

请大家帮忙看看,这个算法还可以再优化一下吗?我觉得我的办法有点笨

第一种情况:@a=("KEY_OraClient10g_home1", "KEY_OraDb10g_home1", "SYSMAN");
第二种情况:@a=("KEY_OraDb10g_home1", "SYSMAN");
根据系统环境的不同@a可能取上面两种情况,第一种情况我要取$a[0]即KEY_OraClient10g_home1,第二种情况我要取$a[0]即KEY_OraDb10g_home1,根据实际情况它们不一定都是$a[0]还可能是$a[1]或$a[2],所以不能只取$a[0]

下面是我写的一小段代码
$flag = 0;
foreach $item (@a)
{
  if(/\w+OraClient\w+/i)
  {
    $str = $item;
    $flag= 1;
    last;
  }
}

if(!$flag)
{
  foreach $item (@a)
  {
    if(/\w+OraDb\w+/i)
    {
      $str = $item;
      last;
    }
  }
}  

我觉得有点笨,有没有更快捷的方法啊?谢谢
在同一个循环里面,判断两次正则。
朋友,能具体点吗?写写示意代码
知道了,想了半天也没往那个方向想,太笨了我
对于具有唯一性标示的,感觉用hash比array更合适吧
只要弄一个合适的key就很好区分了,不需要这么麻烦
写个例子看看


[Copy to clipboard] [ - ]
CODE:
$hash={OraClient10g=>[...],OraDb10g=>[...]}

[...]是个数组,内容你自己填充了,这里再用hash也行
不过感觉你那个情况没必要