2013-09-04 6 views
11

私はPerlで3番目の変数を使わずに2つの変数の値を交換したいとします。 g:3番目のPerl変数を使用せずに2つのPerl変数を交換するにはどうすればよいですか?

my $first = 10; 
my $second = 20; 

簡単な方法でこれを行う方法を教えてください。

+0

($ first、$ second)=($ second、$ first);匿名の配列を作成するので、これはあなたのルールを技術的に不正にしています。 – abiessu

+6

@abiessu:いいえ、匿名の配列はありません。 (それらは単なるリストであり、匿名配列の場合は配列参照を得るために '[...]'を使用します)。そして、匿名配列があったとしても、私はそれを数えるとは思いません「第3の変数」とする。 – ruakh

答えて

18

のみご提供する最良の方法は、あなたが値を交換することができます1行で、このようなものです:

($first, $second) = ($second, $first); 
+0

これは私のためにうまくいきます.. –

+0

しかし、私は適切な方法で私に提案するでしょう。私の答えを更新しています – Developer

+2

あなたのバージョンは 'my'と技術的には既存の変数の値を入れ替えるのではなく、名前が既存の変数に影を付ける変数。 – ruakh

20

あなたは書くことができます。

($first, $second) = ($second, $first); 

§3.4 "List Assignment" in Learning Perl, Third Editionを参照してください。)

+2

私たちは[Learning Perl](http://www.learning-perl.com)の第6版までです:) –

+1

あなたは人々が本当に最初の5つに注意を払っていないと言っていますか?他の回答の見た目から... ;-) –

-5
$first = $first + $second; 
$second = $first - $second; 
$first = $first-$second; 

を。これは、2つの整数の変数をスワップします より良い解決策は、あなたがこれを行うことができ

$first = $first xor $second; 
$second = $first xor $second; 
$first = $first xor $second; 
+1

これはまた、変数には数値のように加算/減算可能なデータが含まれていることを前提としています。 – abiessu

+3

Re:「これはプログラミング言語の中で2つの整数変数を入れ替えます」:それはあまりにも幅が広いと思います。既存の変数に新しい値を割り当てることを可能にする言語に制限をかけても、整数のオーバーフローが明確に定義されていない言語のすべての整数値に対しては機能しません。 (例えば、Cではこのコードは危険です。) – ruakh

+0

okk..my mistake。整数のオーバーフローは考慮しませんでした。しかし、私はいつもどんな言語でも整数の範囲があると思います。私が間違っていると私の間違いを指摘してください。とにかく私は答えを編集しました。ありがとう – rove101

-4

かもしれません単純な数学を使って比較的簡単です。

わかりました。

First = 10 
Second = 20 

我々はFirst = First + Second

を言うなら私たちは今、次のを持っています。

First = 30 
Second = 20 

今、あなたは我々が今持っているSecond = First - Second (Second = 30 - 20)

を言うことができます。

First = 30 
Second = 10 

マイナスまずから第二に、あなたはFirst = 20、およびSecond = 10を取得します。

+3

あまりにも複雑です。なぜ($ first、$ second)=($ second、$ first) 'だけではないのですか? –

+2

複雑なだけでなく、壊れています。この回答は削除する必要があります。 –

-6

すでに記載されているPerlの固有の方法がある

firstValue = firstValue + secondValue; 

secondValue = firstValue - secondValue; 

firstValue = firstValue - secondValue; 
+0

あまりにも複雑です。なぜ($ first、$ second)=($ second、$ first) 'だけではないのですか? –

+1

スカラーの数値以外の文字列値を破壊するので、これはうまくいきません。浮動小数点値を変更する可能性もあります。 –

-1

このロジックを使用することができます最高ですが、ここではPerlを含む多くの言語で動作するXORを使用するテクニックがあります:

use strict; 

my $x = 4; 
my $y = 8; 

print "X: $x Y: $y\n"; 

$x ^= $y; 
$y ^= $x; 
$x ^= $y; 

print "X: $x Y: $y\n"; 

X: 4 Y: 8 
X: 8 Y: 4 
+5

'^ '演算子が文字列と数字の形式でわずかに異なるセマンティクスを持つため、これはPerlでは機能しません。あなたの値の1つを数値でない文字列に変更すると、問題が表示されます。 –

+0

...少なくとも$ x == $ yの場合は動作しません。 – Jan

-6
#!/usr/bin/perl 

$a=5; 
$b=6; 

print "\n The value of a and b before swap is --> $a,$b \n"; 

$a=$a+$b; 
$b=$a-$b; 
$a=$a-$b; 

print "\n The value of a and b after swap is as follows:"; 
print "\n The value of a is ---->$a \n"; 
print "\n The value of b is----->$b \n"; 
+2

スカラーの数値以外の文字列値を破棄するので、これは機能しません。浮動小数点値を変更する可能性もあります。 –

関連する問題