Goalkeeper Pedro Gallese blocked striker Luis Suárez in Uruguay’s first shot from the spot and decided the match for the Peruvians.
Peru’s next opponent will be defending champion Chile, who eliminated Colombia on penalties Friday night in São Paulo.
The match offered few opportunities for both teams and was played under rain in the entire first half. Only 21,000 fans were at the 48,000-seater Arena Fonte Nova in Salvador to watch.
The Uruguayans had three goals disallowed by offside.
The Peru-Chile match will take place Wednesday at the Arena do Gremio in Porto Alegre.
Brazil and Argentina will face off Tuesday for the other spot in the July 7 final at the Maracanã Stadium in Rio de Janeiro.
Source: FOX Sport