Perl, 177 Characters
The first linebreak can be removed; the other two are mandatory.
$/=%d=split//,' >/^\v';$_=<>;$s='#';{
y/v<^/>v</?do{my$o;$o.="
"while s/.$/$o.=$&,""/meg;y'/\\'\/'for$o,$s;$_=$o}:/>x/?die"true
":/>#/?die"false
":s/>(.)/$s$d{$1}/?$s=$1:1;redo}
Explanation:
$/ = %d = (' ' => '>', '/' => '^', '\\' => 'v');
If a right-moving beam runs into an {empty space, up-angled mirror, down-angled mirror} it becomes a {right-moving beam, up-moving beam, down-moving beam}. Initialize $/
along the way -- fortunately "6" is not a valid input char.
$_ = <>;
Read the board into $_
.
$s="#";
$s
is the symbol of whatever the beam is sitting on top of now. Since the laser emitter is to be treated like a wall, set this to be a wall to begin with.
if (tr/v<^/>v</) {
my $o;
$o .= "\n" while s/.$/$o .= $&, ""/meg;
tr,/\\,\\/, for $o, $s;
$_ = $o;
}
If the laser beam is pointing any way except right, rotate its symbol, and then rotate the whole board in place (also rotating the symbols for the mirrors). It's a 90 degree left rotation, accomplished effectively by reversing the rows while transposing rows and columns, in a slightly fiendish s///e
with side effects. In the golfed code, the tr is written in the form y'''
which allows me to skip backslashing one backslash.
die "true\n" if />x/; die "false\n" if />#/;
Terminate with the right message if we hit the target or a wall.
$s = $1 if s/>(.)/$s$d{$1}/;
If there's an empty space in front of the laser, move forward. If there's a mirror in front of the laser, move forward and rotate the beam. In either case, put the "saved symbol" back into the old beam location, and put the thing we just overwrote into the saved symbol.
redo;
Repeat until termination. {...;redo}
is two characters less than for(;;){...}
and three less than while(1){...}
.