It was a little hard to understand, but here we go. I will show you what I did to get the result, not just how it works.
I use a small image with an initial color (100, 99, 193) .

At the top of my program, I will always have this code.
use strict; use warnings; use Data::Printer; use Image::Magick; my $p = new Image::Magick; $p->Read('33141038.jpg'); my @pixel = $p->GetPixel( x => 1, y => 1, map => 'RGB', normalize => 1, );
I checked the documentation at imagemagick.org . He is connected in Image :: Magic in CPAN . There I searched for GetPixel . This provides two useful things. One of them is an explanation, another example that shows that the @pixel array is @pixel , not the scalar as you tried.
Here we reduce the intensity of the red component at (1.1) by half:
@pixels = $image->GetPixel(x=>1,y=>1);
Ok Let me use this. I already have @pixel in my code above. Note that I also enabled the normalize option. You can leave this as default.
p @pixel; # [ # [0] 0.392156862745098, # [1] 0.388235294117647, # [2] 0.756862745098039 # ]
So this is a float. After some googling, I found this answer , which concerns something similar. It looks like part 255 . Let it multiply. We can change things in @pixel by assigning $_ to postfix foreach . This is neat.
$_ *= 255 foreach @pixel; p @pixel;
This is what we wanted. Easy enough. Add one each.
$_ = ( $_ * 255 ) + 1 foreach @pixel; p @pixel;
Still good. But how can we get this back? Documents can say something about SetPixel in the Manipulate section.
color => array of float values
[...]
set one pixel. By default, normalized pixel values ββare expected.
Looks like we need to get back to the float. No problems.
$_ = ( ( $_ * 255 ) + 1 ) / 255 foreach @pixel; p @pixel;
Nice. Of course, we can make the math a little shorter. The result is the same.
$_ = $_ + 1 / 255 foreach @pixel;
Now back to the image.
$p->SetPixel( x => 1, y => 1, color => \@pixel,
In the screenshot, I changed it by adding 20 instead of 1 to make it more visible.

After cleaning, the code is as follows.
use strict; use warnings; use Data::Printer; use Image::Magick; my $p = new Image::Magick; $p->Read('33141038.jpg'); my @pixel = $p->GetPixel( x => 1, y => 1, );
I removed the map and channel arguments from GetPixel and SetPixel as RGB by default. The same goes for normalize .