我正在尝试在Perl的等式中使用可能的变量。
例如:
#!/usr/bin/perl -w
$a = "yellow";
$b = "orange";
$c = "col1fl0ur";
$c = $a + $b;
print "$a + $b = $c \n";
我希望能够说明每个变量$a
,$b
,$c
的值,然后才能说明
$a + $b = "col1fl0ur"
你可能会问;重点是什么?只打印col1fl0ur
,但我希望能够使用更多的变量,例如在这种情况下:
#!/usr/bin/perl -w
###values###
$a = "yellow";
$b = "orange";
$c = "col1fl0ur";
$d = "derp";
$e = "oplo";
$f = "qwerty";
###defining the equation###
$c = $a + $b;
$d = $a + $c;
$f = $d + $c;
###Printing###
print "$a + $b = $c \n";
print "$a + $c = $d \n";
print "$d + $c = $f \n";
答案 0 :(得分:1)
如果你解释了真正的问题会对你有所帮助,但这样的事情可能有所帮助。
请注意,永远不会在实时代码中使用$a
和$b
,因为它们是保留变量名。
use strict;
use warnings;
my ($a, $b, $c, $d, $e, $f) = qw( yellow orange col1fl0ur derp oplo qwerty );
### defining the equation ###
my %sum;
$sum{$a}{$b} = $c;
$sum{$a}{$c} = $d;
$sum{$d}{$c} = $f;
### Printing ###
for my $pair ([$a, $b], [$a, $c], [$d, $c]) {
my ($p1, $p2) = @$pair;
printf "%s + %s = %s\n", $p1, $p2, $sum{$p1}{$p2};
}
<强>输出强>
yellow + orange = col1fl0ur
yellow + col1fl0ur = derp
derp + col1fl0ur = qwerty
如果您希望$b + $a
与$a + $b
相同,那么您必须明确说明。例如,
$sum{$a}{$b} = $c;
$sum{$b}{$a} = $c;
答案 1 :(得分:1)
你可以使用Overload pragma .. 您可以按如下方式创建新包:
package Tst;
use overload "+" => \&myadd;
sub new {
my $class = shift;
my $value = shift;
return bless \$value => $class;
}
sub myadd {
my ($x, $y) = @_;
$x = ref($x) ? $$x : $x;
$y = ref($y) ? $$y : $y;
my $value = '';
if ($x eq 'yellow' and $y eq 'orange'){
$value = 'col1fl0ur';
}
return $value;
}
1
然后在你的主程序中,你可以做你喜欢的事情:
use Tst;
my $a = Tst->new('yellow');
my $b = Tst->new('orange');
my $c = $a + $b;
say $c;
打印出col1fl0ur
。
答案 2 :(得分:1)
您可以考虑创建一个适合您目的的数据结构(无论它们是什么样的!?!),而不是将值分配给Perl变量($a, $b, $c
等)。鲍罗丁的答案朝着这个方向迈出了一步。
这个例子使这个想法更进一步:你的“数学”系统中的术语不会与个别的Perl变量相关联;相反,它们将是更大数据结构的组成部分。
use strict;
use warnings;
my %xs = (
a => 'yellow',
b => 'orange',
c => 'col1fl0ur',
d => 'foo',
e => 'bar',
f => 'fubb',
g => 'blub',
);
$xs{'a + b'} = $xs{c};
$xs{'a * c'} = $xs{d};
$xs{'d / c'} = $xs{f};
$xs{'a + b - d + f'} = $xs{g};
printf("%15s = %s\n", $_, $xs{$_}) for sort keys %xs;
输出:
a = yellow
a * c = foo
a + b = col1fl0ur
a + b - d + f = blub
b = orange
c = col1fl0ur
d = foo
d / c = fubb
e = bar
f = fubb
g = blub