in reply to Store system call in a variable

Use the qx operator, also known as backticks. For example my $out = `/usr/bin/amixer get Master`; will call that command and store its output in $out. Even better, use system and capture from IPC::System::Simple, that's got better error handling.

The manipulations you're currently doing with grep and awk can be done in Perl. If I understand correctly you want to get the first value that looks like a percentage. You could do this via e.g. my ($vol) = $out=~/\b(\d+)%/;

In your current code, $VolCur contains a value like "26%", when you add one to that you get a value of 27 (and a warning, which is why my code above doesn't grab the percentage sign into $vol), which you would need to add a percent sign to get amixer to accept it as a percentage value.

Lastly, I don't think your line system($VolCur); is doing anything useful, since it's just trying to call commands named after percentages... that's another reason why in general, you should always check for errors from system calls, see for example system on how to do that.