2013-10-12 10 views
0

Perl을 사용하여 방정식에서 가능한 변수를 사용하려고합니다. 예를 들어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

나는 당신의 설명을 읽고, 나는 아직도 물어보고 싶은 – mob

답변

1

하지만,이 같은 월 도움.

$a$b은 예약 된 변수 이름이므로 실제 코드로 사용하면 안됩니다. 당신이 $a + $b와 동일하게 $b + $a를 원하는 경우에

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 

당신은 이렇게 명시 적으로 말을해야합니다. 예를 들어,

$sum{$a}{$b} = $c; 
$sum{$b}{$a} = $c; 
+0

''라이브 코드에서 $ a와 $ b를 사용하면 안된다 '는 것이 무슨 뜻입니까? – Jean

+0

내가 말했듯이, 그것들은 내부적으로 Perl이 사용하는 예약 된 변수 이름이며 그 값은 독립적으로 수정할 수 있습니다. – Borodin

+2

오셨습니까? 'sort '에 사용 된'$ a $ b' – Jean

1

당신은 다음과 같이 새 패키지를 만들 수 있습니다 .. 과부하 프라그 을 사용할 수 있습니다 :

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입니다.

1

Perl 변수 ($a, $b, $c 등)에 값을 할당하는 대신 사용자의 목적에 맞는 데이터 구조를 만드는 것이 좋습니다 (!?!). Borodin의 대답은 그 방향으로 부분적으로 나아갔습니다.

이 예는 그 아이디어를 조금 더 멀리합니다. "수학적"시스템의 용어는 개별 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 
관련 문제