使用以下代码部分,我通常根据存储在%r中的一组规则,分割混合字符串整数字段(例如45A34C)并计算每个字母的实例(由进行它的整数指定)。这很好用。
use strict;
use warnings;
my @F; $F[5] = '*';
my @ar = split(/([ABCD])/, $F[5]);
my %r = (A => 1, B => 1, C => 0, D => 1, '*' => 0);
my $s = 0;
my $op;
my $n;
$s += $n * $r{$op} while ($n,$op) = splice @ar,0,4;
但是,在某些情况下,$F[5]
只包含星号 - 文字*
字符。任何包含此行的行都会返回以下警告:
Use of uninitialized value $op in hash element at b.pl line 10.
Use of uninitialized value in multiplication (*) at b.pl line 10.
Argument "*" isn't numeric in multiplication (*) at b.pl line 10.
鉴于没有为*
分配号码,这是预期的。我试图在哈希中为字符分配一个数字,但我无法找出正确的语法。我试过了:
my %r = (A => 1,B => 1,C => 0,D => 1, * => 0);
my %r = (A => 1,B => 1,C => 0,D => 1, \* => 0);
但警告仍然存在。为特殊字符赋值的正确方法是什么?为什么*不能像'A'那样处理?
答案 0 :(得分:4)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="240dp"
android:layout_marginBottom="10dp"
android:background="@color/Pink">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="1"
android:layout_marginTop="20dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="12dp"
android:background="@drawable/shape"> <!--here is shape file-->
<LinearLayout
android:orientation="vertical"
android:layout_width="0dp"
android:layout_weight="0.80"
android:layout_marginTop="14dp"
android:layout_marginLeft="14dp"
android:weightSum="1"
android:layout_height="160dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Large Text"
android:id="@+id/title" />
<RelativeLayout
android:layout_width="40dp"
android:layout_height="20dp"
android:layout_marginTop="-20dp"
android:layout_marginLeft="236dp">
</RelativeLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="Small Text"
android:id="@+id/desc" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
my %r = (A => 1, B => 1, C => 0, D => 1, '*' => 0);
&#34; autoquotes&#34;它的LHS是标识符,但不一定是标识符;它可以是任何表达。 (事实上,你甚至不需要使用=>
,这只是一个花哨的逗号(=>
)。)
但这并不能解决你的问题。 ,
仅包含@ar
,因此*
为$n
且*
未定义。 $op
需要至少有两个值才能使该代码生效。因此,让我们明确地寻找有意义的价值观。
@ar
顺便说一下,
my %r = (A => 1, B => 1, C => 0, D => 1 );
my $s = 0;
while ($F[5] =~ /(\d+)([ABCD])/g) {
my $n = $1;
my $op = $2;
$s += $n * $r{$op};
}
编写* => 0
是一种奇怪的方式,这意味着&#34;是全局*= > 0
,数字大于零&#34;。
*=
是一种写\* => 0
的奇怪方式,这意味着&#34;是全局\*= > 0
的地址,数值大于零&#34;。