Если гарантировано только одно «а», то ответа Павла будет достаточно, с парой небольших изменений:
$foo =~ s|a([^/]*\.jpg)\Z|n$1|;
Во-первых, у меня нет «/» перед «а». Достаточно указать, что между «a» и «.jpg» нет символов «/», и это учитывает оба ваших примера (при наличии «/» оно соответствует только второму из ваших примеров). Я также удалил модификатор '/ g' и добавил '\ Z', чтобы привязать регулярное выражение к концу строки. Нам нужен только последний матч.
Если между последним '/' и '.jpg может быть несколько символов' a ', все становится немного сложнее:
while ($foo =~ s|(/[^/]*)a([^/]*\.jpg\Z)|$1n$2|) { }
По сути, хотя между последним '/' и '.jpg все еще есть' а ', продолжайте менять' а 'на' н 'по одному.