You probably noticed the = assignment operator in some of the earlier examples: $S2000 = "Hello, Polly.\n" print $S2000 Standing alone, it's the same as the PASM set opcode. In fact, if you run parrot in bytecode debugging mode (as in Section 11.4.2 in Chapter 11), you'll see it really is just a set opcode underneath. PIR has many other symbol operators: arithmetic, concatenation, comparison, bitwise, and logical. Many of these combine with assignment to produce the equivalent of a PASM opcode: .local int sum sum = $I42 + 5 print sum print "\n" The statement sum = $I42 + 5 translates to something like add I16, I17, 5 . PIR also provides += , -= , >>= , . . . that map to the two-argument forms like add I16, I17 . Many PASM opcodes that return a single value also have an alternate syntax in PIR with the assignment operator: $I0 = length str # length $I0, str $I0 = isa PerlInt, "scalar" # isa $I0, PerlInt, "scalar" $I0 = exists hash["key"] # exists $I0, hash["key"] $N0 = sin $N1 $N0 = atan $N1, $N2 $S0 = repeat "x", 20 $P0 = newclass "Foo" . . . A complete list of PIR operators is available in Chapter 11. We'll discuss the comparison operators in Section 10.5 later in this chapter. |